diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/BoxingInterpreter.java b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/BoxingInterpreter.java index 32b01ebc60c..47cd1bc2ee3 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/BoxingInterpreter.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/BoxingInterpreter.java @@ -221,12 +221,12 @@ public class BoxingInterpreter extends OptimizationBasicInterpreter { if (v instanceof BoxedBasicValue) { onMergeFail((BoxedBasicValue) v); - v = new BasicValue(v.getType()); + return MIXED_VALUE; } if (w instanceof BoxedBasicValue) { onMergeFail((BoxedBasicValue) w); - w = new BasicValue(w.getType()); + return MIXED_VALUE; } return super.merge(v, w); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/common/OptimizationBasicInterpreter.java b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/common/OptimizationBasicInterpreter.java index a1eda689cc2..0876b79afb0 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/common/OptimizationBasicInterpreter.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/common/OptimizationBasicInterpreter.java @@ -27,7 +27,7 @@ import org.jetbrains.org.objectweb.asm.tree.analysis.BasicInterpreter; import org.jetbrains.org.objectweb.asm.tree.analysis.BasicValue; public class OptimizationBasicInterpreter extends BasicInterpreter { - private static final BasicValue MIXED_VALUE = new BasicValue(Type.getObjectType("#")); + public static final BasicValue MIXED_VALUE = new BasicValue(Type.getObjectType("#")); private static final BasicValue BOOLEAN_VALUE = new BasicValue(Type.BOOLEAN_TYPE); private static final BasicValue CHAR_VALUE = new BasicValue(Type.CHAR_TYPE); private static final BasicValue BYTE_VALUE = new BasicValue(Type.BYTE_TYPE); diff --git a/compiler/testData/codegen/boxWithStdlib/boxingOptimization/kt5588.kt b/compiler/testData/codegen/boxWithStdlib/boxingOptimization/kt5588.kt new file mode 100644 index 00000000000..ece5914c504 --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/boxingOptimization/kt5588.kt @@ -0,0 +1,10 @@ +fun box() : String { + val s = "notA" + val id = when (s) { + "a" -> 1 + else -> null + } + + if (id == null) return "OK" + return "fail" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 5b373bb94bd..53573a33133 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -134,6 +134,11 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/boxingOptimization/kt5493.kt"); } + @TestMetadata("kt5588.kt") + public void testKt5588() throws Exception { + doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/boxingOptimization/kt5588.kt"); + } + @TestMetadata("nullCheck.kt") public void testNullCheck() throws Exception { doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/boxingOptimization/nullCheck.kt");