From 8a14b62a238002c310ddbedb3bf95faa4e2b9edc Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 19 Jun 2013 18:46:58 +0400 Subject: [PATCH] KT-3574 Assertion error when using ?: in for range #KT-3574 Fixed Do not assert that resolvedCall is non-null, since getRangeAsBinaryCall can return a BinaryCall that doesn't represent a range at all (as specified by the comment in getRangeAsBinaryCall) --- .../org/jetbrains/jet/codegen/ExpressionCodegen.java | 11 +++++------ .../testData/codegen/box/controlStructures/kt3574.kt | 9 +++++++++ .../generated/BlackBoxCodegenTestGenerated.java | 5 +++++ 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 compiler/testData/codegen/box/controlStructures/kt3574.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 74da585b067..97e43c748eb 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -466,12 +466,11 @@ public class ExpressionCodegen extends JetVisitor implem RangeCodegenUtil.BinaryCall binaryCall = RangeCodegenUtil.getRangeAsBinaryCall(forExpression); if (binaryCall != null) { ResolvedCall resolvedCall = bindingContext.get(RESOLVED_CALL, binaryCall.op); - assert resolvedCall != null; - - CallableDescriptor rangeTo = resolvedCall.getResultingDescriptor(); - if (RangeCodegenUtil.isOptimizableRangeTo(rangeTo)) { - generateForLoop(new ForInRangeLiteralLoopGenerator(forExpression, binaryCall)); - return StackValue.none(); + if (resolvedCall != null) { + if (RangeCodegenUtil.isOptimizableRangeTo(resolvedCall.getResultingDescriptor())) { + generateForLoop(new ForInRangeLiteralLoopGenerator(forExpression, binaryCall)); + return StackValue.none(); + } } } diff --git a/compiler/testData/codegen/box/controlStructures/kt3574.kt b/compiler/testData/codegen/box/controlStructures/kt3574.kt new file mode 100644 index 00000000000..3a739e33d87 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/kt3574.kt @@ -0,0 +1,9 @@ +fun nil() = null + +fun list() = java.util.Arrays.asList("1") + +fun box(): String { + for (x in nil()?:list()) { + } + return "OK" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index 81f312778e2..c7d3a2c1a75 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -1436,6 +1436,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/controlStructures/kt3280.kt"); } + @TestMetadata("kt3574.kt") + public void testKt3574() throws Exception { + doTest("compiler/testData/codegen/box/controlStructures/kt3574.kt"); + } + @TestMetadata("kt416.kt") public void testKt416() throws Exception { doTest("compiler/testData/codegen/box/controlStructures/kt416.kt");