From ad6afee53f40a9949df915cd48c95e19b3d1baf6 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Wed, 5 Nov 2014 14:01:42 +0300 Subject: [PATCH] Fix for KT-6196: ClassCastException on unit property initializer #KT-6196 Fixed --- .../jet/codegen/ExpressionCodegen.java | 3 +- compiler/testData/codegen/box/unit/ifElse.kt | 31 +++++++++++++++++++ .../BlackBoxCodegenTestGenerated.java | 6 ++++ 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/box/unit/ifElse.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index f84ecc20bab..fe5e447064f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1209,8 +1209,7 @@ public class ExpressionCodegen extends JetVisitor implem return StackValue.none(); } else { - Type type = expressionType(expression); - Type targetType = type.equals(UNIT_TYPE) ? type : OBJECT_TYPE; + Type targetType = expressionType(ifExpression); gen(expression, targetType); diff --git a/compiler/testData/codegen/box/unit/ifElse.kt b/compiler/testData/codegen/box/unit/ifElse.kt new file mode 100644 index 00000000000..58f2d8910b6 --- /dev/null +++ b/compiler/testData/codegen/box/unit/ifElse.kt @@ -0,0 +1,31 @@ +class A (val p: String, p1: String, p2: String) { + + var cond1: String = "" + + var cond2: String = "" + + val prop1 = if (cond1(p)) p1 + + val prop2 = if (cond2(p)) else; + + + fun cond1(p: String): Boolean { + cond1 = "cond1" + return p == "test" + } + + fun cond2(p: String): Boolean { + cond2 = "cond2" + return p == "test" + } +} + +fun box(): String { + val a = A("test", "OK", "fail") + + if (a.cond1 != "cond1") return "fail 2 : ${a.cond1}" + + if (a.cond2 != "cond2") return "fail 3 : ${a.cond2}" + + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index f5ab39109a4..be11614eaca 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -6837,6 +6837,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("ifElse.kt") + public void testIfElse() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/unit/ifElse.kt"); + doTest(fileName); + } + @TestMetadata("kt3634.kt") public void testKt3634() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/unit/kt3634.kt");