From 7678815f17fbf24bfae51816cde2d27401e2d632 Mon Sep 17 00:00:00 2001 From: svtk Date: Thu, 26 Jan 2012 12:58:14 +0400 Subject: [PATCH] KT-1156 Throwing exception on the right side of elvis operator marks code unreachable --- .../jet/lang/cfg/JetControlFlowProcessor.java | 11 +++++++++++ .../diagnostics/tests/controlFlowAnalysis/kt1156.jet | 8 ++++++++ 2 files changed, 19 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1156.jet 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) +}