diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ArrayWithIndexForLoopGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ArrayWithIndexForLoopGenerator.kt index f442104f8bc..fd804a9a127 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ArrayWithIndexForLoopGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ArrayWithIndexForLoopGenerator.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.codegen.range.forLoop +import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.ExpressionCodegen import org.jetbrains.kotlin.codegen.StackValue import org.jetbrains.kotlin.codegen.generateCallReceiver @@ -24,7 +25,7 @@ class ArrayWithIndexForLoopGenerator( ) : AbstractWithIndexForLoopGenerator(codegen, forExpression, loopParameter, rangeCall) { private val arrayType = codegen.asmType(ExpressionCodegen.getExpectedReceiverType(rangeCall)) - private val arrayElementType = arrayType.elementType + private val arrayElementType = AsmUtil.correctElementType(arrayType) private var arrayVar = -1 private var arrayLengthVar = -1 diff --git a/compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfObjectArrayWithIndex.kt b/compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfObjectArrayWithIndex.kt new file mode 100644 index 00000000000..af7852b8309 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfObjectArrayWithIndex.kt @@ -0,0 +1,12 @@ +// WITH_RUNTIME + +fun box(): String { + val arr = Array(4) { arrayOf("x$it") } + + var s = "" + for ((i, sarr) in arr.withIndex()) { + s += "$i:${sarr.toList()}" + } + + return if (s != "0:[x0]1:[x1]2:[x2]3:[x3]") "Fail: '$s'" else "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfPrimArrayWithIndex.kt b/compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfPrimArrayWithIndex.kt new file mode 100644 index 00000000000..4110567b89a --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfPrimArrayWithIndex.kt @@ -0,0 +1,14 @@ +// WITH_RUNTIME + +fun box(): String { + // [[0], [1], [2], [3]] + val arr = Array(4) { intArrayOf(it) } + + var s = 0 + for ((i, iarr) in arr.withIndex()) { + s += i*iarr[0] + } + + // 0 + 1 + 4 + 9 = 14 + return if (s != 14) "Fail: $s" else "OK" +} \ No newline at end of file diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 0acddd57465..ee512c7ade9 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -4627,6 +4627,16 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); } + @TestMetadata("forInArrayOfObjectArrayWithIndex.kt") + public void testForInArrayOfObjectArrayWithIndex() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfObjectArrayWithIndex.kt"); + } + + @TestMetadata("forInArrayOfPrimArrayWithIndex.kt") + public void testForInArrayOfPrimArrayWithIndex() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfPrimArrayWithIndex.kt"); + } + @TestMetadata("forInArrayWithIndexContinuesAsUnmodified.kt") public void testForInArrayWithIndexContinuesAsUnmodified() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayWithIndexContinuesAsUnmodified.kt"); @@ -13814,8 +13824,7 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes @TestMetadata("kt23260.kt") public void testKt23260() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/properties/lateinit/local/kt23260.kt"); - doTest(fileName); + runTest("compiler/testData/codegen/box/properties/lateinit/local/kt23260.kt"); } @TestMetadata("localLateinit.kt") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index b62fb39af40..75a8e7b8dca 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -4627,6 +4627,16 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); } + @TestMetadata("forInArrayOfObjectArrayWithIndex.kt") + public void testForInArrayOfObjectArrayWithIndex() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfObjectArrayWithIndex.kt"); + } + + @TestMetadata("forInArrayOfPrimArrayWithIndex.kt") + public void testForInArrayOfPrimArrayWithIndex() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfPrimArrayWithIndex.kt"); + } + @TestMetadata("forInArrayWithIndexContinuesAsUnmodified.kt") public void testForInArrayWithIndexContinuesAsUnmodified() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayWithIndexContinuesAsUnmodified.kt"); @@ -13814,8 +13824,7 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { @TestMetadata("kt23260.kt") public void testKt23260() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/properties/lateinit/local/kt23260.kt"); - doTest(fileName); + runTest("compiler/testData/codegen/box/properties/lateinit/local/kt23260.kt"); } @TestMetadata("localLateinit.kt") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index e4e3e8d1961..ef5ad635523 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -2559,8 +2559,7 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { @TestMetadata("doNotAppendEmptyString.kt") public void testDoNotAppendEmptyString() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/stringOperations/doNotAppendEmptyString.kt"); - doTest(fileName); + runTest("compiler/testData/codegen/bytecodeText/stringOperations/doNotAppendEmptyString.kt"); } @TestMetadata("interpolation.kt") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 9f6d588878c..8d8b9ac5589 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -4627,6 +4627,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); } + @TestMetadata("forInArrayOfObjectArrayWithIndex.kt") + public void testForInArrayOfObjectArrayWithIndex() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfObjectArrayWithIndex.kt"); + } + + @TestMetadata("forInArrayOfPrimArrayWithIndex.kt") + public void testForInArrayOfPrimArrayWithIndex() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfPrimArrayWithIndex.kt"); + } + @TestMetadata("forInArrayWithIndexContinuesAsUnmodified.kt") public void testForInArrayWithIndexContinuesAsUnmodified() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayWithIndexContinuesAsUnmodified.kt"); @@ -13814,8 +13824,7 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes @TestMetadata("kt23260.kt") public void testKt23260() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/properties/lateinit/local/kt23260.kt"); - doTest(fileName); + runTest("compiler/testData/codegen/box/properties/lateinit/local/kt23260.kt"); } @TestMetadata("localLateinit.kt") diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 007944e84a1..bba3976bd39 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -4397,6 +4397,16 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true); } + @TestMetadata("forInArrayOfObjectArrayWithIndex.kt") + public void testForInArrayOfObjectArrayWithIndex() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfObjectArrayWithIndex.kt"); + } + + @TestMetadata("forInArrayOfPrimArrayWithIndex.kt") + public void testForInArrayOfPrimArrayWithIndex() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayOfPrimArrayWithIndex.kt"); + } + @TestMetadata("forInArrayWithIndexContinuesAsUnmodified.kt") public void testForInArrayWithIndexContinuesAsUnmodified() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInArrayWithIndex/forInArrayWithIndexContinuesAsUnmodified.kt"); @@ -13204,8 +13214,7 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { @TestMetadata("kt23260.kt") public void testKt23260() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/properties/lateinit/local/kt23260.kt"); - doTest(fileName); + runTest("compiler/testData/codegen/box/properties/lateinit/local/kt23260.kt"); } @TestMetadata("localLateinit.kt")