diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java index be8edf9e94d..97e60c3c873 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java @@ -270,8 +270,14 @@ public class ControlStructureTypingUtils { @Override public Void visitIfExpression(@NotNull JetIfExpression ifExpression, CheckTypeContext c) { - checkExpressionType(ifExpression.getThen(), c); - checkExpressionType(ifExpression.getElse(), c); + JetExpression thenBranch = ifExpression.getThen(); + JetExpression elseBranch = ifExpression.getElse(); + if (thenBranch == null || elseBranch == null) { + visitExpression(ifExpression, c); + return null; + } + checkExpressionType(thenBranch, c); + checkExpressionType(elseBranch, c); return null; } diff --git a/compiler/testData/diagnostics/tests/controlStructures/kt4310.kt b/compiler/testData/diagnostics/tests/controlStructures/kt4310.kt new file mode 100644 index 00000000000..f8666c5985c --- /dev/null +++ b/compiler/testData/diagnostics/tests/controlStructures/kt4310.kt @@ -0,0 +1,11 @@ +package f + +fun test(a: Boolean, b: Boolean): Int { + return if(a) { + 1 + } else { + if (b) { + 3 + } + } // no error, but must be +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 793b56df7e2..ff712272d93 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -1670,6 +1670,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/controlStructures/kt1075.kt"); } + @TestMetadata("kt4310.kt") + public void testKt4310() throws Exception { + doTest("compiler/testData/diagnostics/tests/controlStructures/kt4310.kt"); + } + @TestMetadata("kt657.kt") public void testKt657() throws Exception { doTest("compiler/testData/diagnostics/tests/controlStructures/kt657.kt");