diff --git a/compiler/testData/codegen/box/builderInference/issues/kt57709.kt b/compiler/testData/codegen/box/builderInference/issues/kt57709.kt new file mode 100644 index 00000000000..bec781c7028 --- /dev/null +++ b/compiler/testData/codegen/box/builderInference/issues/kt57709.kt @@ -0,0 +1,43 @@ +// ISSUE: KT-57709 +// WITH_STDLIB + +// IGNORE_LIGHT_ANALYSIS +// IGNORE_BACKEND: ANY +// REASON: red code (see corresponding diagnostic test) + +var result = "" + +@JvmName("consumeAnyBuildeeReceiver") +fun Buildee.consumeBuildeeReceiver() { + result += "Any/" +} +@JvmName("consumeDifferentTypeBuildeeReceiver") +fun Buildee.consumeBuildeeReceiver() { + result += "DifferentType/" +} + +fun box(): String { + build { + setTypeVariable(Any()) + consumeBuildeeReceiver() + } + build { + setTypeVariable(Any()) + consumeBuildeeReceiver() + } + return if (result == "Any/Any/") "OK" else "FAIL: $result" +} + + + + +class DifferentType + +class Buildee { + fun setTypeVariable(value: TV) { storage = value } + private var storage: TV = Any() as TV +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt57709.fir.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt57709.fir.kt new file mode 100644 index 00000000000..33deb02ab4a --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt57709.fir.kt @@ -0,0 +1,41 @@ +// ISSUE: KT-57709 +// CHECK_TYPE_WITH_EXACT +// WITH_STDLIB + +fun test() { + val buildee = build { + setTypeVariable(Any()) + 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 DifferentType + +fun consumeAny(value: Any) {} + +fun consumeDifferentType(value: DifferentType) {} + +class Buildee { + fun setTypeVariable(value: TV) { storage = value } + fun getTypeVariable(): TV = storage + private var storage: TV = null!! +} + +@JvmName("consumeAnyBuildeeReceiver") +fun Buildee.consumeBuildeeReceiver() { + consumeAny(getTypeVariable()) +} +@JvmName("consumeDifferentTypeBuildeeReceiver") +fun Buildee.consumeBuildeeReceiver() { + consumeDifferentType(getTypeVariable()) +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt57709.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt57709.kt new file mode 100644 index 00000000000..a56fec7f9ee --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt57709.kt @@ -0,0 +1,41 @@ +// ISSUE: KT-57709 +// CHECK_TYPE_WITH_EXACT +// WITH_STDLIB + +fun test() { + val buildee = build { + setTypeVariable(Any()) + 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 DifferentType + +fun consumeAny(value: Any) {} + +fun consumeDifferentType(value: DifferentType) {} + +class Buildee { + fun setTypeVariable(value: TV) { storage = value } + fun getTypeVariable(): TV = storage + private var storage: TV = null!! +} + +@JvmName("consumeAnyBuildeeReceiver") +fun Buildee.consumeBuildeeReceiver() { + consumeAny(getTypeVariable()) +} +@JvmName("consumeDifferentTypeBuildeeReceiver") +fun Buildee.consumeBuildeeReceiver() { + consumeDifferentType(getTypeVariable()) +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +}