From 982e8133ba72a9b75adc03fd3d5c39dfcda22ac1 Mon Sep 17 00:00:00 2001 From: Stanislav Ruban Date: Thu, 30 Nov 2023 22:04:40 +0100 Subject: [PATCH] [tests] Add test data for KT-53422 --- .../box/builderInference/issues/kt53422a.kt | 35 +++++++++++++++++ .../box/builderInference/issues/kt53422b.kt | 38 +++++++++++++++++++ .../builderInference/issues/kt53422a.fir.kt | 34 +++++++++++++++++ .../tests/builderInference/issues/kt53422a.kt | 34 +++++++++++++++++ .../builderInference/issues/kt53422b.fir.kt | 37 ++++++++++++++++++ .../tests/builderInference/issues/kt53422b.kt | 37 ++++++++++++++++++ 6 files changed, 215 insertions(+) create mode 100644 compiler/testData/codegen/box/builderInference/issues/kt53422a.kt create mode 100644 compiler/testData/codegen/box/builderInference/issues/kt53422b.kt create mode 100644 compiler/testData/diagnostics/tests/builderInference/issues/kt53422a.fir.kt create mode 100644 compiler/testData/diagnostics/tests/builderInference/issues/kt53422a.kt create mode 100644 compiler/testData/diagnostics/tests/builderInference/issues/kt53422b.fir.kt create mode 100644 compiler/testData/diagnostics/tests/builderInference/issues/kt53422b.kt diff --git a/compiler/testData/codegen/box/builderInference/issues/kt53422a.kt b/compiler/testData/codegen/box/builderInference/issues/kt53422a.kt new file mode 100644 index 00000000000..1d147dd8d1a --- /dev/null +++ b/compiler/testData/codegen/box/builderInference/issues/kt53422a.kt @@ -0,0 +1,35 @@ +// ISSUE: KT-53422 + +// IGNORE_LIGHT_ANALYSIS +// IGNORE_BACKEND: ANY +// REASON: red code (see corresponding diagnostic test) + +fun box(): String { + buildFromValue( + innerBuild { setInnerTypeVariable(TargetType()) }, + { it.placeholderExtensionInvokeOnInnerBuildee() } + ) + return "OK" +} + + + + +class TargetType + +class InnerBuildee { + fun setInnerTypeVariable(value: ITV) { storage = value } + private var storage: ITV = TargetType() as ITV +} + +fun InnerBuildee.placeholderExtensionInvokeOnInnerBuildee() {} + +class Buildee + +fun innerBuild(instructions: InnerBuildee.() -> Unit): InnerBuildee { + return InnerBuildee().apply(instructions) +} + +fun buildFromValue(value: PTV, instructions: Buildee.(PTV) -> Unit): Buildee { + return Buildee().apply { instructions(value) } +} diff --git a/compiler/testData/codegen/box/builderInference/issues/kt53422b.kt b/compiler/testData/codegen/box/builderInference/issues/kt53422b.kt new file mode 100644 index 00000000000..eec9af84cf1 --- /dev/null +++ b/compiler/testData/codegen/box/builderInference/issues/kt53422b.kt @@ -0,0 +1,38 @@ +// ISSUE: KT-53422 + +// IGNORE_LIGHT_ANALYSIS +// IGNORE_BACKEND: ANY +// REASON: red code (see corresponding diagnostic test) + +fun box(): String { + stepByStepBuild( + { + it.concreteTypeMemberProperty + TargetType() + }, + { + consumeTargetTypeBase(it) + } + ) + return "OK" +} + + + + +class ConcreteType +open class TargetTypeBase { + val concreteTypeMemberProperty: ConcreteType = ConcreteType() +} +class TargetType: TargetTypeBase() + +fun consumeTargetTypeBase(value: TargetTypeBase) {} + +class Buildee + +fun stepByStepBuild( + instructionsA: Buildee.(PTV) -> PTV, + instructionsB: Buildee.(PTV) -> Unit, +): Buildee { + return Buildee().apply { instructionsB(instructionsA(TargetType() as PTV)) } +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt53422a.fir.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt53422a.fir.kt new file mode 100644 index 00000000000..b16da0099f0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt53422a.fir.kt @@ -0,0 +1,34 @@ +// ISSUE: KT-53422 +// CHECK_TYPE_WITH_EXACT + +fun test() { + val buildee = buildFromValue( + innerBuild { setInnerTypeVariable(TargetType()) }, + { it.placeholderExtensionInvokeOnInnerBuildee() } + ) + // 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 InnerBuildee { + fun setInnerTypeVariable(value: ITV) { storage = value } + private var storage: ITV = null!! +} + +fun InnerBuildee.placeholderExtensionInvokeOnInnerBuildee() {} + +class Buildee + +fun innerBuild(instructions: InnerBuildee.() -> Unit): InnerBuildee { + return InnerBuildee().apply(instructions) +} + +fun buildFromValue(value: PTV, instructions: Buildee.(PTV) -> Unit): Buildee { + return Buildee().apply { instructions(value) } +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt53422a.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt53422a.kt new file mode 100644 index 00000000000..06c0f45d769 --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt53422a.kt @@ -0,0 +1,34 @@ +// ISSUE: KT-53422 +// CHECK_TYPE_WITH_EXACT + +fun test() { + val buildee = buildFromValue( + innerBuild { setInnerTypeVariable(TargetType()) }, + { it.placeholderExtensionInvokeOnInnerBuildee() } + ) + // 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 InnerBuildee { + fun setInnerTypeVariable(value: ITV) { storage = value } + private var storage: ITV = null!! +} + +fun InnerBuildee.placeholderExtensionInvokeOnInnerBuildee() {} + +class Buildee + +fun innerBuild(instructions: InnerBuildee.() -> Unit): InnerBuildee { + return InnerBuildee().apply(instructions) +} + +fun buildFromValue(value: PTV, instructions: Buildee.(PTV) -> Unit): Buildee { + return Buildee().apply { instructions(value) } +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt53422b.fir.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt53422b.fir.kt new file mode 100644 index 00000000000..95f06b77c28 --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt53422b.fir.kt @@ -0,0 +1,37 @@ +// ISSUE: KT-53422 +// CHECK_TYPE_WITH_EXACT + +fun test() { + val buildee = stepByStepBuild( + { + it.concreteTypeMemberProperty + TargetType() + }, + { + consumeTargetTypeBase(it) + } + ) + // 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 ConcreteType +open class TargetTypeBase { + val concreteTypeMemberProperty: ConcreteType = ConcreteType() +} +class TargetType: TargetTypeBase() + +fun consumeTargetTypeBase(value: TargetTypeBase) {} + +class Buildee + +fun stepByStepBuild( + instructionsA: Buildee.(PTV) -> PTV, + instructionsB: Buildee.(PTV) -> Unit, +): Buildee { + return null!! +} diff --git a/compiler/testData/diagnostics/tests/builderInference/issues/kt53422b.kt b/compiler/testData/diagnostics/tests/builderInference/issues/kt53422b.kt new file mode 100644 index 00000000000..e9a85c96d36 --- /dev/null +++ b/compiler/testData/diagnostics/tests/builderInference/issues/kt53422b.kt @@ -0,0 +1,37 @@ +// ISSUE: KT-53422 +// CHECK_TYPE_WITH_EXACT + +fun test() { + val buildee = stepByStepBuild( + { + it.concreteTypeMemberProperty + TargetType() + }, + { + consumeTargetTypeBase(it) + } + ) + // 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 ConcreteType +open class TargetTypeBase { + val concreteTypeMemberProperty: ConcreteType = ConcreteType() +} +class TargetType: TargetTypeBase() + +fun consumeTargetTypeBase(value: TargetTypeBase) {} + +class Buildee + +fun stepByStepBuild( + instructionsA: Buildee.(PTV) -> PTV, + instructionsB: Buildee.(PTV) -> Unit, +): Buildee { + return null!! +}