From 4021e022b7bf03d1bdf3285129d7015835a2431a Mon Sep 17 00:00:00 2001 From: Stanislav Ruban Date: Sat, 2 Dec 2023 15:26:57 +0100 Subject: [PATCH] [tests] Add test data for KT-55281 --- .../box/builderInference/issues/kt55281.kt | 31 +++++++++++++++++++ .../builderInference/issues/kt55281.fir.kt | 30 ++++++++++++++++++ .../tests/builderInference/issues/kt55281.kt | 30 ++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 compiler/testData/codegen/box/builderInference/issues/kt55281.kt create mode 100644 compiler/testData/diagnostics/tests/builderInference/issues/kt55281.fir.kt create mode 100644 compiler/testData/diagnostics/tests/builderInference/issues/kt55281.kt diff --git a/compiler/testData/codegen/box/builderInference/issues/kt55281.kt b/compiler/testData/codegen/box/builderInference/issues/kt55281.kt new file mode 100644 index 00000000000..89112c474c1 --- /dev/null +++ b/compiler/testData/codegen/box/builderInference/issues/kt55281.kt @@ -0,0 +1,31 @@ +// ISSUE: KT-55281 + +// IGNORE_LIGHT_ANALYSIS +// IGNORE_BACKEND_K2: ANY +// REASON: red code (see corresponding diagnostic test) + +fun box(): String { + build { + this as DerivedBuildee<*> + consumeNullableAny(getTypeVariable()) + } + return "OK" +} + + + + +class TargetType + +fun consumeNullableAny(value: Any?) {} + +open class Buildee { + fun getTypeVariable(): TV = storage + private var storage: TV = null as TV +} + +class DerivedBuildee: Buildee() + +fun build(instructions: Buildee.() -> Unit): Buildee { + return DerivedBuildee().apply(instructions) +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt55281.fir.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt55281.fir.kt new file mode 100644 index 00000000000..5244f976942 --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt55281.fir.kt @@ -0,0 +1,30 @@ +// ISSUE: KT-55281 +// CHECK_TYPE_WITH_EXACT + +fun test() { + val buildee = build { + this as DerivedBuildee<*> + consumeNullableAny(getTypeVariable()) + } + // 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 + +fun consumeNullableAny(value: Any?) {} + +open class Buildee { + fun getTypeVariable(): TV = storage + private var storage: TV = null!! +} + +class DerivedBuildee: Buildee() + +fun build(instructions: Buildee.() -> Unit): Buildee { + return DerivedBuildee().apply(instructions) +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt55281.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt55281.kt new file mode 100644 index 00000000000..dba93502ea4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt55281.kt @@ -0,0 +1,30 @@ +// ISSUE: KT-55281 +// CHECK_TYPE_WITH_EXACT + +fun test() { + val buildee = build { + this as DerivedBuildee<*> + consumeNullableAny(getTypeVariable()) + } + // 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 + +fun consumeNullableAny(value: Any?) {} + +open class Buildee { + fun getTypeVariable(): TV = storage + private var storage: TV = null!! +} + +class DerivedBuildee: Buildee() + +fun build(instructions: Buildee.() -> Unit): Buildee { + return DerivedBuildee().apply(instructions) +}