diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 1d772e344eb..82e18e8381a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -3581,7 +3581,7 @@ public class ExpressionCodegen extends JetVisitor implem else { elementType = correctElementType(arrayType); } - StackValue arrayValue = gen(array); + StackValue arrayValue = genLazy(array, arrayType); StackValue index = genLazy(indices.get(0), Type.INT_TYPE); return StackValue.arrayElement(elementType, arrayValue, index); diff --git a/compiler/testData/codegen/box/arrays/arrayInstanceOf.kt b/compiler/testData/codegen/box/arrays/arrayInstanceOf.kt new file mode 100644 index 00000000000..af22c1a20bd --- /dev/null +++ b/compiler/testData/codegen/box/arrays/arrayInstanceOf.kt @@ -0,0 +1,26 @@ +//test [], get and iterator calls +fun test(createIntNotLong: Boolean): String { + val a = if (createIntNotLong) IntArray(5) else LongArray(5) + if (a is IntArray) { + val x = a.iterator() + var i = 0 + while (x.hasNext()) { + if (a[i] != x.next()) return "Fail $i" + i++ + } + return "O" + } else if (a is LongArray) { + val x = a.iterator() + var i = 0 + while (x.hasNext()) { + if (a.get(i) != x.next()) return "Fail $i" + i++ + } + return "K" + } + return "fail" +} + +fun box(): String { + return test(true) + test(false) +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java index 9a0f13ef367..ec6355b7a01 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -98,6 +98,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/arrays"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("arrayInstanceOf.kt") + public void testArrayInstanceOf() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/arrayInstanceOf.kt"); + doTest(fileName); + } + @TestMetadata("arrayPlusAssign.kt") public void testArrayPlusAssign() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/arrayPlusAssign.kt");