diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index e060073994a..6e7c644d7de 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -32257,6 +32257,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/when/kt2466.kt"); } + @TestMetadata("kt43242.kt") + public void testKt43242() throws Exception { + runTest("compiler/testData/codegen/box/when/kt43242.kt"); + } + @TestMetadata("kt5307.kt") public void testKt5307() throws Exception { runTest("compiler/testData/codegen/box/when/kt5307.kt"); diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/SwitchGenerator.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/SwitchGenerator.kt index 1d5f54635bb..c7daf2809d6 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/SwitchGenerator.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/SwitchGenerator.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.isTrueConst import org.jetbrains.org.objectweb.asm.Label +import org.jetbrains.org.objectweb.asm.Type import java.util.* // TODO: eliminate the temporary variable @@ -367,7 +368,8 @@ class SwitchGenerator(private val expression: IrWhen, private val data: BlockInf // information for the subject as the `when` line number has already been // emitted. codegen.noLineNumberScope { - subject.accept(codegen, data).materialize() + val subjectValue = subject.accept(codegen, data) + subjectValue.materializeAt(Type.INT_TYPE, subjectValue.irType) } genIntSwitch(cases) } diff --git a/compiler/testData/codegen/box/when/kt43242.kt b/compiler/testData/codegen/box/when/kt43242.kt new file mode 100644 index 00000000000..5a6c48a85f3 --- /dev/null +++ b/compiler/testData/codegen/box/when/kt43242.kt @@ -0,0 +1,28 @@ +// TARGET_BACKEND: JVM +// FILE: kt43242.kt + +fun fromJson() { + test = Bar().fromJson()?.let { + when (it) { + 0 -> false + 1 -> true + else -> true + } + } +} + +var test: Any? = "xxx" + +fun box(): String { + fromJson() + return if (test != null) "Fail: $test" else "OK" +} + +// FILE: Bar.java +import org.jetbrains.annotations.Nullable; + +public class Bar { + public final @Nullable Integer fromJson() { + return null; + } +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index bfb847b9f6e..a7830f03dd5 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -34028,6 +34028,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/when/kt2466.kt"); } + @TestMetadata("kt43242.kt") + public void testKt43242() throws Exception { + runTest("compiler/testData/codegen/box/when/kt43242.kt"); + } + @TestMetadata("kt5307.kt") public void testKt5307() throws Exception { runTest("compiler/testData/codegen/box/when/kt5307.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 96d8a6ee25b..ac04cff9c25 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -31662,6 +31662,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/when/kt2466.kt"); } + @TestMetadata("kt43242.kt") + public void testKt43242() throws Exception { + runTest("compiler/testData/codegen/box/when/kt43242.kt"); + } + @TestMetadata("kt5307.kt") public void testKt5307() throws Exception { runTest("compiler/testData/codegen/box/when/kt5307.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index bcf94dd10fe..5df032e166f 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -32257,6 +32257,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/when/kt2466.kt"); } + @TestMetadata("kt43242.kt") + public void testKt43242() throws Exception { + runTest("compiler/testData/codegen/box/when/kt43242.kt"); + } + @TestMetadata("kt5307.kt") public void testKt5307() throws Exception { runTest("compiler/testData/codegen/box/when/kt5307.kt");