From 66effee8cd04370509078146530ebeb1bc8c93a0 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Thu, 12 Dec 2013 17:11:41 +0400 Subject: [PATCH] Fix safe call --- .../jetbrains/jet/codegen/ExpressionCodegen.java | 2 +- .../testData/codegen/box/casts/asSafeFail.kt | 16 ++++++++++++++++ .../generated/BlackBoxCodegenTestGenerated.java | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/casts/asSafeFail.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 1f1ab378e31..eed1162ed90 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -3565,7 +3565,7 @@ The "returned" value of try expression with no finally is either the last expres DeclarationDescriptor descriptor = rightType.getConstructor().getDeclarationDescriptor(); if (descriptor instanceof ClassDescriptor || descriptor instanceof TypeParameterDescriptor) { StackValue value = genQualified(receiver, left); - value.put(boxType(rightTypeAsm), v); + value.put(boxType(value.type), v); if (opToken != JetTokens.AS_SAFE) { if (!CodegenUtil.isNullableType(rightType)) { diff --git a/compiler/testData/codegen/box/casts/asSafeFail.kt b/compiler/testData/codegen/box/casts/asSafeFail.kt new file mode 100644 index 00000000000..c3500dd5c1a --- /dev/null +++ b/compiler/testData/codegen/box/casts/asSafeFail.kt @@ -0,0 +1,16 @@ +class A +class B + +fun box(): String { + val a = A() + a as? B + a as? B ?: "fail" + + if ((A() as? B) != null) return "fail1" + if ((a as? B) != null) return "fail2" + + val v = a as? B ?: "fail" + if (v != "fail") return "fail4" + + 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 3ef54068bfe..e62748e8cd3 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -733,6 +733,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/casts/asSafe.kt"); } + @TestMetadata("asSafeFail.kt") + public void testAsSafeFail() throws Exception { + doTest("compiler/testData/codegen/box/casts/asSafeFail.kt"); + } + @TestMetadata("castGenericNull.kt") public void testCastGenericNull() throws Exception { doTest("compiler/testData/codegen/box/casts/castGenericNull.kt");