diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 7e84d329d07..121099053bd 100644 --- a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -263,7 +263,7 @@ public class ExpressionCodegen extends JetVisitor { final JetParameter loopParameter = expression.getLoopParameter(); final VariableDescriptor parameterDescriptor = bindingContext.get(BindingContext.VALUE_PARAMETER, loopParameter); JetType paramType = parameterDescriptor.getOutType(); - Type asmParamType = typeMapper.mapType(paramType); + Type asmParamType = typeMapper.boxType(typeMapper.mapType(paramType)); int iteratorVar = myMap.enterTemp(); gen(expression.getLoopRange(), loopRangeType); diff --git a/idea/testData/codegen/regressions/kt245.jet b/idea/testData/codegen/regressions/kt245.jet new file mode 100644 index 00000000000..3a40068ec94 --- /dev/null +++ b/idea/testData/codegen/regressions/kt245.jet @@ -0,0 +1,32 @@ +fun foo() { + val l = java.util.ArrayList(2) + l.add(1) + + for (el in l) {} + + //verify error "Expecting to find integer on stack" + val iterator = l.iterator() + + //another verify error "Mismatched stack types" + while (iterator?.hasNext() ?: false) { + val i = iterator?.next() + } + + //the same + if (iterator != null) { + while (iterator.hasNext()) { + val i = iterator?.next() + } + } + + //this way it works + if (iterator != null) { + while (iterator.hasNext()) { + iterator.next() //because of the bug KT-244 i can't write "val i = iterator.next()" + } + } +} + +fun box() : String { + return "OK" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/codegen/Kt247Test.java b/idea/tests/org/jetbrains/jet/codegen/Kt247Test.java deleted file mode 100644 index ba64714ddd2..00000000000 --- a/idea/tests/org/jetbrains/jet/codegen/Kt247Test.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.jetbrains.jet.codegen; - -public class Kt247Test extends CodegenTestCase { - public void testMe () throws Exception { - blackBoxFile("regressions/kt247.jet"); - } -} diff --git a/idea/tests/org/jetbrains/jet/codegen/SafeRefTest.java b/idea/tests/org/jetbrains/jet/codegen/SafeRefTest.java new file mode 100644 index 00000000000..69d6dc16648 --- /dev/null +++ b/idea/tests/org/jetbrains/jet/codegen/SafeRefTest.java @@ -0,0 +1,11 @@ +package org.jetbrains.jet.codegen; + +public class SafeRefTest extends CodegenTestCase { + public void test247 () throws Exception { + blackBoxFile("regressions/kt247.jet"); + } + + public void test245 () throws Exception { + blackBoxFile("regressions/kt245.jet"); + } +}