diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java index 9faefde01d9..3f7b24a8e21 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java @@ -275,6 +275,17 @@ public class JetControlFlowProcessor { builder.unsupported(expression); // TODO } } + else if (operationType == JetTokens.ELVIS) { + builder.read(expression); + value(expression.getLeft(), false); + value(expression.getOperationReference(), false); + Label afterElvis = builder.createUnboundLabel(); + builder.jumpOnTrue(afterElvis); + if (right != null) { + value(right, false); + } + builder.bindLabel(afterElvis); + } else { value(expression.getLeft(), false); if (right != null) { diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1156.jet b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1156.jet new file mode 100644 index 00000000000..a7d0f673b4b --- /dev/null +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1156.jet @@ -0,0 +1,8 @@ +//KT-1156 Throwing exception on the right side of elvis operator marks code unreachable + +//+JDK + +fun foo(maybe: Int?) { + val i : Int = maybe ?: throw RuntimeException("No value") + System.out?.println(i) +}