From 8d9434548f8062d16abff409a085862582ec1fbf Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Sat, 11 Feb 2012 11:09:02 +0200 Subject: [PATCH] KT-1199 - test and fix for erased case --- .../jet/codegen/ExpressionCodegen.java | 2 +- .../testData/codegen/regressions/kt1199.kt | 20 +++++++++++++++++++ .../jet/codegen/FunctionGenTest.java | 4 ++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/regressions/kt1199.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 8c4309eb6d5..17056191de3 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -343,7 +343,7 @@ public class ExpressionCodegen extends JetVisitor { Type asmParamType = asmType(paramType); int iteratorVar = myFrameMap.enterTemp(); - gen(expression.getLoopRange(), loopRangeType); + gen(expression.getLoopRange(), boxType(loopRangeType)); invokeFunctionNoParams(iteratorDescriptor, asmIterType, v); v.store(iteratorVar, asmIterType); diff --git a/compiler/testData/codegen/regressions/kt1199.kt b/compiler/testData/codegen/regressions/kt1199.kt new file mode 100644 index 00000000000..6c35ccc26d2 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt1199.kt @@ -0,0 +1,20 @@ +fun T?.iterator() = object { + var hasNext = this@iterator != null + private set + + fun next() : T { + if (hasNext) { + hasNext = false + return this@iterator.sure() + } + throw java.util.NoSuchElementException() + } +} + +fun box() : String { + var k = 0 + for (i in 1) { + k++ + } + return if(k == 1) "OK" else "fail" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java index 1fd882c1fd0..fbe92e77737 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java @@ -70,6 +70,10 @@ public class FunctionGenTest extends CodegenTestCase { blackBoxFile("regressions/kt873.kt"); } + public void testKt1199 () { + blackBoxFile("regressions/kt1199.kt"); + } + public void testFunction () throws InvocationTargetException, IllegalAccessException { blackBoxFile("functions/functionExpression.jet"); }