diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 1d00255d7e0..fe0007114ec 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -245,7 +245,10 @@ public class ExpressionCodegen extends JetVisitor { if (isEmptyExpression(thenExpression)) { if (isEmptyExpression(elseExpression)) { - condition.put(asmType, v); + if (!asmType.equals(JetTypeMapper.TUPLE0_TYPE)) { + throw new CompilationException("Completely empty 'if' is expected to have Unit type", null, expression); + } + StackValue.putTuple0Instance(v); return StackValue.onStack(asmType); } return generateSingleBranchIf(condition, elseExpression, false); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java index 16cba0e72e0..0ec3c7b2bf5 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java @@ -260,7 +260,7 @@ public abstract class StackValue { } } - protected static void putTuple0Instance(InstructionAdapter v) { + public static void putTuple0Instance(InstructionAdapter v) { v.visitFieldInsn(Opcodes.GETSTATIC, "jet/Tuple0", "INSTANCE", "Ljet/Tuple0;"); } diff --git a/compiler/testData/codegen/regressions/kt2062.kt b/compiler/testData/codegen/regressions/kt2062.kt new file mode 100644 index 00000000000..169e193c0e7 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt2062.kt @@ -0,0 +1,5 @@ +fun box(): String { + val a = if(true) { + } + return if (a.toString() == "()") "OK" else "fail" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java b/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java index b28ed3f9ba5..6a44c189f96 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java @@ -346,4 +346,9 @@ public class ControlStructuresTest extends CodegenTestCase { createEnvironmentWithMockJdkAndIdeaAnnotations(CompilerSpecialMode.JDK_HEADERS); blackBoxFile("regressions/kt1742.kt"); } + + public void testKt2062() throws Exception { + createEnvironmentWithMockJdkAndIdeaAnnotations(CompilerSpecialMode.JDK_HEADERS); + blackBoxFile("regressions/kt2062.kt"); + } }