From ca587513e38bafbecf966796380d16d41b969cad Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 22 Nov 2012 16:53:37 +0400 Subject: [PATCH] Fix for finally before empty return --- .../jetbrains/jet/codegen/ExpressionCodegen.java | 1 + .../controlStructures/finallyOnEmptyReturn.kt | 14 ++++++++++++++ .../jet/codegen/ControlStructuresTest.java | 5 +++++ 3 files changed, 20 insertions(+) create mode 100644 compiler/testData/codegen/controlStructures/finallyOnEmptyReturn.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index bf8e479f17d..baf4b58540c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1332,6 +1332,7 @@ public class ExpressionCodegen extends JetVisitor implem v.areturn(returnType); } else { + doFinallyOnReturn(); v.visitInsn(RETURN); } return StackValue.none(); diff --git a/compiler/testData/codegen/controlStructures/finallyOnEmptyReturn.kt b/compiler/testData/codegen/controlStructures/finallyOnEmptyReturn.kt new file mode 100644 index 00000000000..db1262a9d7a --- /dev/null +++ b/compiler/testData/codegen/controlStructures/finallyOnEmptyReturn.kt @@ -0,0 +1,14 @@ +var result = "Fail" + +fun foo() { + try { + return + } finally { + result = "OK" + } +} + +fun box(): String { + foo() + return result +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java b/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java index e7c69161308..82c40ce44fc 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java @@ -469,4 +469,9 @@ public class ControlStructuresTest extends CodegenTestCase { createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); blackBoxFile("controlStructures/conditionOfEmptyIf.kt"); } + + public void testFinallyOnEmptyReturn() { + createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); + blackBoxFile("controlStructures/finallyOnEmptyReturn.kt"); + } }