From 50e58c00ea6892ebfdd041d0b471ac6fed23768a Mon Sep 17 00:00:00 2001 From: Stanislav Ruban Date: Thu, 30 Nov 2023 22:03:44 +0100 Subject: [PATCH] [tests] Add test data for KT-50827 --- .../box/builderInference/issues/kt50827a.kt | 33 +++++++++++++++++++ .../box/builderInference/issues/kt50827b.kt | 29 ++++++++++++++++ .../builderInference/issues/kt50827.fir.kt | 30 +++++++++++++++++ .../tests/builderInference/issues/kt50827.kt | 30 +++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 compiler/testData/codegen/box/builderInference/issues/kt50827a.kt create mode 100644 compiler/testData/codegen/box/builderInference/issues/kt50827b.kt create mode 100644 compiler/testData/diagnostics/tests/builderInference/issues/kt50827.fir.kt create mode 100644 compiler/testData/diagnostics/tests/builderInference/issues/kt50827.kt diff --git a/compiler/testData/codegen/box/builderInference/issues/kt50827a.kt b/compiler/testData/codegen/box/builderInference/issues/kt50827a.kt new file mode 100644 index 00000000000..19e54c5f5b6 --- /dev/null +++ b/compiler/testData/codegen/box/builderInference/issues/kt50827a.kt @@ -0,0 +1,33 @@ +// ISSUE: KT-50827 + +// IGNORE_LIGHT_ANALYSIS +// IGNORE_BACKEND: ANY +// REASON: red code (see corresponding diagnostic test) + +fun box(): String { + val box = ClassWithBoundedTypeParameter( + build { + setTypeVariable(TargetType()) + } + ) + consumeTargetTypeBuildee(box.buildee) + return "OK" +} + + + + +class TargetType + +fun consumeTargetTypeBuildee(value: Buildee) {} + +class ClassWithBoundedTypeParameter(val buildee: Buildee) + +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/kt50827b.kt b/compiler/testData/codegen/box/builderInference/issues/kt50827b.kt new file mode 100644 index 00000000000..91c17fab562 --- /dev/null +++ b/compiler/testData/codegen/box/builderInference/issues/kt50827b.kt @@ -0,0 +1,29 @@ +// ISSUE: KT-50827 + +fun box(): String { + val box = ClassWithBoundedTypeParameter( + build { + setTypeVariable(TargetType()) + } + ) + consumeAnyBuildee(box.buildee) + return "OK" +} + + + + +class TargetType + +fun consumeAnyBuildee(value: Buildee) {} + +class ClassWithBoundedTypeParameter(val buildee: Buildee) + +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/kt50827.fir.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt50827.fir.kt new file mode 100644 index 00000000000..0390d5edb80 --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt50827.fir.kt @@ -0,0 +1,30 @@ +// ISSUE: KT-50827 +// CHECK_TYPE_WITH_EXACT + +fun test() { + val box = ClassWithBoundedTypeParameter( + build { + setTypeVariable(TargetType()) + } + ) + val buildee = box.buildee + // 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")!>buildee) +} + + + + +class TargetType + +class ClassWithBoundedTypeParameter(val buildee: Buildee) + +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/kt50827.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt50827.kt new file mode 100644 index 00000000000..3d547cee1df --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt50827.kt @@ -0,0 +1,30 @@ +// ISSUE: KT-50827 +// CHECK_TYPE_WITH_EXACT + +fun test() { + val box = ClassWithBoundedTypeParameter( + build { + setTypeVariable(TargetType()) + } + ) + val buildee = box.buildee + // 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"), TYPE_MISMATCH("Buildee; Buildee")!>buildee) +} + + + + +class TargetType + +class ClassWithBoundedTypeParameter(val buildee: Buildee) + +class Buildee { + fun setTypeVariable(value: TV) { storage = value } + private var storage: TV = null!! +} + +fun build(instructions: Buildee.() -> Unit): Buildee { + return Buildee().apply(instructions) +}