diff --git a/compiler/testData/codegen/box/builderInference/issues/kt54767a.kt b/compiler/testData/codegen/box/builderInference/issues/kt54767a.kt new file mode 100644 index 00000000000..849667cae40 --- /dev/null +++ b/compiler/testData/codegen/box/builderInference/issues/kt54767a.kt @@ -0,0 +1,26 @@ +// ISSUE: KT-54767 +// WITH_STDLIB + +fun box(): String { + val buildee by lazy { + build { + setTypeVariable(TargetType()) + } + } + buildee + return "OK" +} + + + + +class TargetType + +class Buildee { + fun setTypeVariable(value: TV) { storage = value } + private var storage: TV = TargetType() as TV +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +} diff --git a/compiler/testData/codegen/box/builderInference/issues/kt54767b.kt b/compiler/testData/codegen/box/builderInference/issues/kt54767b.kt new file mode 100644 index 00000000000..58c6c902516 --- /dev/null +++ b/compiler/testData/codegen/box/builderInference/issues/kt54767b.kt @@ -0,0 +1,29 @@ +// ISSUE: KT-54767 +// WITH_STDLIB + +class Klass { + val buildee by lazy { + build { + setTypeVariable(TargetType()) + } + } +} + +fun box(): String { + Klass().buildee + return "OK" +} + + + + +class TargetType + +class Buildee { + fun setTypeVariable(value: TV) { storage = value } + private var storage: TV = TargetType() as TV +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt54767a.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt54767a.kt new file mode 100644 index 00000000000..2cd63cf38dd --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt54767a.kt @@ -0,0 +1,29 @@ +// ISSUE: KT-54767 +// FIR_IDENTICAL +// CHECK_TYPE_WITH_EXACT +// WITH_STDLIB + +fun test() { + val buildee by lazy { + build { + setTypeVariable(TargetType()) + } + } + // 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 Buildee { + fun setTypeVariable(value: TV) { storage = value } + private var storage: TV = null!! +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt54767b.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt54767b.kt new file mode 100644 index 00000000000..f1eb0f3a268 --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt54767b.kt @@ -0,0 +1,32 @@ +// ISSUE: KT-54767 +// FIR_IDENTICAL +// CHECK_TYPE_WITH_EXACT +// WITH_STDLIB + +class Klass { + val buildee by lazy { + build { + setTypeVariable(TargetType()) + } + } +} + +fun test() { + // 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>(Klass().buildee) +} + + + + +class TargetType + +class Buildee { + fun setTypeVariable(value: TV) { storage = value } + private var storage: TV = null!! +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +}