From 4676b8a2ca757ed7e81c14d6c5a02f5b55e17e13 Mon Sep 17 00:00:00 2001 From: Stanislav Ruban Date: Sat, 2 Dec 2023 15:28:00 +0100 Subject: [PATCH] [tests] Add test data for KT-59426 --- .../box/builderInference/issues/kt59426.kt | 38 +++++++++++++++++++ .../builderInference/issues/kt59426.fir.kt | 34 +++++++++++++++++ .../tests/builderInference/issues/kt59426.kt | 34 +++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 compiler/testData/codegen/box/builderInference/issues/kt59426.kt create mode 100644 compiler/testData/diagnostics/tests/builderInference/issues/kt59426.fir.kt create mode 100644 compiler/testData/diagnostics/tests/builderInference/issues/kt59426.kt diff --git a/compiler/testData/codegen/box/builderInference/issues/kt59426.kt b/compiler/testData/codegen/box/builderInference/issues/kt59426.kt new file mode 100644 index 00000000000..e841fd9c427 --- /dev/null +++ b/compiler/testData/codegen/box/builderInference/issues/kt59426.kt @@ -0,0 +1,38 @@ +// ISSUE: KT-59426 + +// IGNORE_LIGHT_ANALYSIS +// IGNORE_BACKEND_K1: ANY +// REASON: red code (see corresponding diagnostic test) + +// IGNORE_BACKEND_K2: JVM_IR, WASM +// REASON: run-time failure (java.lang.ClassCastException: DifferentType cannot be cast to TargetType @ Kt59426Kt.consumeBuildeeReceiver) + +fun box(): String { + build { + setTypeVariable(DifferentType()) + consumeBuildeeReceiver() + } + return "OK" +} + + + + +class TargetType +class DifferentType + +fun consumeTargetType(value: TargetType) {} + +class Buildee { + fun setTypeVariable(value: TV) { storage = value } + fun getTypeVariable(): TV = storage + private var storage: TV = TargetType() as TV +} + +fun Buildee.consumeBuildeeReceiver() { + consumeTargetType(getTypeVariable()) +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt59426.fir.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt59426.fir.kt new file mode 100644 index 00000000000..05f50f3bf0b --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt59426.fir.kt @@ -0,0 +1,34 @@ +// ISSUE: KT-59426 +// CHECK_TYPE_WITH_EXACT + +fun test() { + val buildee = build { + setTypeVariable(DifferentType()) + consumeBuildeeReceiver() + } + // exact type equality check — turns unexpected compile-time behavior into red code + // considered to be non-user-reproducible code for the purposes of these tests + checkExactType>(buildee) +} + + + + +class TargetType +class DifferentType + +fun consumeTargetType(value: TargetType) {} + +class Buildee { + fun setTypeVariable(value: TV) { storage = value } + fun getTypeVariable(): TV = storage + private var storage: TV = null!! +} + +fun Buildee.consumeBuildeeReceiver() { + consumeTargetType(getTypeVariable()) +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt59426.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt59426.kt new file mode 100644 index 00000000000..a400c28246d --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt59426.kt @@ -0,0 +1,34 @@ +// ISSUE: KT-59426 +// CHECK_TYPE_WITH_EXACT + +fun test() { + val buildee = build { + setTypeVariable(DifferentType()) + consumeBuildeeReceiver() + } + // exact type equality check — turns unexpected compile-time behavior into red code + // considered to be non-user-reproducible code for the purposes of these tests + checkExactType>(buildee) +} + + + + +class TargetType +class DifferentType + +fun consumeTargetType(value: TargetType) {} + +class Buildee { + fun setTypeVariable(value: TV) { storage = value } + fun getTypeVariable(): TV = storage + private var storage: TV = null!! +} + +fun Buildee.consumeBuildeeReceiver() { + consumeTargetType(getTypeVariable()) +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +}