diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/CharSequenceWithIndexForLoopGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/CharSequenceWithIndexForLoopGenerator.kt index abb4096ff03..6d6a86d6782 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/CharSequenceWithIndexForLoopGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/CharSequenceWithIndexForLoopGenerator.kt @@ -63,12 +63,14 @@ class CharSequenceWithIndexForLoopGenerator( } override fun assignLoopParametersNextValues() { + v.load(charSeqVar, charSeqType) + v.load(indexVar, Type.INT_TYPE) + v.invokeinterface("java/lang/CharSequence", "charAt", "(I)C") if (elementLoopComponent != null) { - v.load(charSeqVar, charSeqType) - v.load(indexVar, Type.INT_TYPE) - v.invokeinterface("java/lang/CharSequence", "charAt", "(I)C") StackValue.local(elementLoopComponent.parameterVar, elementLoopComponent.parameterType) .store(StackValue.onStack(Type.CHAR_TYPE), v) + } else { + v.pop() } } diff --git a/compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexCheckSideEffects.kt b/compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexCheckSideEffects.kt new file mode 100644 index 00000000000..b708614dbb8 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexCheckSideEffects.kt @@ -0,0 +1,30 @@ +// KJS_WITH_FULL_RUNTIME +// WITH_RUNTIME + +class CountingString(private val s: String) : CharSequence { + var lengthCtr = 0 + var getCtr = 0 + + override val length: Int + get() = s.length.also { lengthCtr++ } + + override fun subSequence(startIndex: Int, endIndex: Int) = TODO() + override fun get(index: Int) = s.get(index).also { getCtr++ } +} + +val cs = CountingString("abcd") + +fun box(): String { + val s = StringBuilder() + + for ((index, x) in cs.withIndex()) { + s.append("$index:$x;") + } + + val ss = s.toString() + if (ss != "0:a;1:b;2:c;3:d;") return "fail: '$ss'" + if (cs.lengthCtr != 5) return "lengthCtr != 5, was: '${cs.lengthCtr}'" + if (cs.getCtr != 4) return "getCtr != 4, was: '${cs.getCtr}'" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt b/compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt new file mode 100644 index 00000000000..f345d5d2511 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt @@ -0,0 +1,30 @@ +// KJS_WITH_FULL_RUNTIME +// WITH_RUNTIME + +class CountingString(private val s: String) : CharSequence { + var lengthCtr = 0 + var getCtr = 0 + + override val length: Int + get() = s.length.also { lengthCtr++ } + + override fun subSequence(startIndex: Int, endIndex: Int) = TODO() + override fun get(index: Int) = s.get(index).also { getCtr++ } +} + +val cs = CountingString("abcd") + +fun box(): String { + val s = StringBuilder() + + for ((index, _) in cs.withIndex()) { + s.append("$index;") + } + + val ss = s.toString() + if (ss != "0;1;2;3;") return "fail: '$ss'" + if (cs.lengthCtr != 5) return "lengthCtr != 5, was: '${cs.lengthCtr}'" + if (cs.getCtr != 4) return "getCtr != 4, was: '${cs.getCtr}'" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt b/compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt new file mode 100644 index 00000000000..d0f9c59103a --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt @@ -0,0 +1,29 @@ +// KJS_WITH_FULL_RUNTIME +// WITH_RUNTIME + +class CountingString(private val s: String) : CharSequence { + var lengthCtr = 0 + var getCtr = 0 + + override val length: Int + get() = s.length.also { lengthCtr++ } + + override fun subSequence(startIndex: Int, endIndex: Int) = TODO() + override fun get(index: Int) = s.get(index).also { getCtr++ } +} +val cs = CountingString("abcd") + +fun box(): String { + val s = StringBuilder() + + for ((_, x) in cs.withIndex()) { + s.append("$x;") + } + + val ss = s.toString() + if (ss != "a;b;c;d;") return "fail: '$ss'" + if (cs.lengthCtr != 5) return "lengthCtr != 5, was: '${cs.lengthCtr}'" + if (cs.getCtr != 4) return "getCtr != 4, was: '${cs.getCtr}'" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexCheckSideEffects.kt b/compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexCheckSideEffects.kt new file mode 100644 index 00000000000..69d1de655a9 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexCheckSideEffects.kt @@ -0,0 +1,31 @@ +// KJS_WITH_FULL_RUNTIME +// WITH_RUNTIME + +class CountingIterable(private val s: Iterable) : Iterable { + var hasNextCtr = 0 + var nextCtr = 0 + + inner class CountingIterableIterator(private val it: Iterator) : Iterator { + override fun hasNext() = it.hasNext().also { hasNextCtr++ } + override fun next() = it.next().also { nextCtr++ } + } + + override fun iterator() = CountingIterableIterator(s.iterator()) +} + +val xs = CountingIterable(listOf("a", "b", "c", "d")) + +fun box(): String { + val s = StringBuilder() + + for ((index, x) in xs.withIndex()) { + s.append("$index:$x;") + } + + val ss = s.toString() + if (ss != "0:a;1:b;2:c;3:d;") return "fail: '$ss'" + if (xs.hasNextCtr != 5) return "hasNextCtr != 5, was: '${xs.hasNextCtr}'" + if (xs.nextCtr != 4) return "nextCtr != 4, was: '${xs.nextCtr}'" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoElementVarCheckSideEffects.kt b/compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoElementVarCheckSideEffects.kt new file mode 100644 index 00000000000..6ac0a7198a7 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoElementVarCheckSideEffects.kt @@ -0,0 +1,31 @@ +// KJS_WITH_FULL_RUNTIME +// WITH_RUNTIME + +class CountingIterable(private val s: Iterable) : Iterable { + var hasNextCtr = 0 + var nextCtr = 0 + + inner class CountingIterableIterator(private val it: Iterator) : Iterator { + override fun hasNext() = it.hasNext().also { hasNextCtr++ } + override fun next() = it.next().also { nextCtr++ } + } + + override fun iterator() = CountingIterableIterator(s.iterator()) +} + +val xs = CountingIterable(listOf("a", "b", "c", "d")) + +fun box(): String { + val s = StringBuilder() + + for ((index, _) in xs.withIndex()) { + s.append("$index;") + } + + val ss = s.toString() + if (ss != "0;1;2;3;") return "fail: '$ss'" + if (xs.hasNextCtr != 5) return "hasNextCtr != 5, was: '${xs.hasNextCtr}'" + if (xs.nextCtr != 4) return "nextCtr != 4, was: '${xs.nextCtr}'" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoIndexVarCheckSideEffects.kt b/compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoIndexVarCheckSideEffects.kt new file mode 100644 index 00000000000..cd53b7681d9 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoIndexVarCheckSideEffects.kt @@ -0,0 +1,31 @@ +// KJS_WITH_FULL_RUNTIME +// WITH_RUNTIME + +class CountingIterable(private val s: Iterable) : Iterable { + var hasNextCtr = 0 + var nextCtr = 0 + + inner class CountingIterableIterator(private val it: Iterator) : Iterator { + override fun hasNext() = it.hasNext().also { hasNextCtr++ } + override fun next() = it.next().also { nextCtr++ } + } + + override fun iterator() = CountingIterableIterator(s.iterator()) +} + +val xs = CountingIterable(listOf("a", "b", "c", "d")) + +fun box(): String { + val s = StringBuilder() + + for ((_, x) in xs.withIndex()) { + s.append("$x;") + } + + val ss = s.toString() + if (ss != "a;b;c;d;") return "fail: '$ss'" + if (xs.hasNextCtr != 5) return "hasNextCtr != 5, was: '${xs.hasNextCtr}'" + if (xs.nextCtr != 4) return "nextCtr != 4, was: '${xs.nextCtr}'" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexCheckSideEffects.kt b/compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexCheckSideEffects.kt new file mode 100644 index 00000000000..86414b0c9e1 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexCheckSideEffects.kt @@ -0,0 +1,31 @@ +// KJS_WITH_FULL_RUNTIME +// WITH_RUNTIME + +class CountingSequence(private val s: Sequence) : Sequence { + var hasNextCtr = 0 + var nextCtr = 0 + + inner class CountingSequenceIterator(private val it: Iterator) : Iterator { + override fun hasNext() = it.hasNext().also { hasNextCtr++ } + override fun next() = it.next().also { nextCtr++ } + } + + override fun iterator() = CountingSequenceIterator(s.iterator()) +} + +val xs = CountingSequence(listOf("a", "b", "c", "d").asSequence()) + +fun box(): String { + val s = StringBuilder() + + for ((index, x) in xs.withIndex()) { + s.append("$index:$x;") + } + + val ss = s.toString() + if (ss != "0:a;1:b;2:c;3:d;") return "fail: '$ss'" + if (xs.hasNextCtr != 5) return "hasNextCtr != 5, was: '${xs.hasNextCtr}'" + if (xs.nextCtr != 4) return "nextCtr != 4, was: '${xs.nextCtr}'" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVarCheckSideEffects.kt b/compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVarCheckSideEffects.kt new file mode 100644 index 00000000000..efc54ca97f8 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVarCheckSideEffects.kt @@ -0,0 +1,31 @@ +// KJS_WITH_FULL_RUNTIME +// WITH_RUNTIME + +class CountingSequence(private val s: Sequence) : Sequence { + var hasNextCtr = 0 + var nextCtr = 0 + + inner class CountingSequenceIterator(private val it: Iterator) : Iterator { + override fun hasNext() = it.hasNext().also { hasNextCtr++ } + override fun next() = it.next().also { nextCtr++ } + } + + override fun iterator() = CountingSequenceIterator(s.iterator()) +} + +val xs = CountingSequence(listOf("a", "b", "c", "d").asSequence()) + +fun box(): String { + val s = StringBuilder() + + for ((index, _) in xs.withIndex()) { + s.append("$index;") + } + + val ss = s.toString() + if (ss != "0;1;2;3;") return "fail: '$ss'" + if (xs.hasNextCtr != 5) return "hasNextCtr != 5, was: '${xs.hasNextCtr}'" + if (xs.nextCtr != 4) return "nextCtr != 4, was: '${xs.nextCtr}'" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVarCheckSideEffects.kt b/compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVarCheckSideEffects.kt new file mode 100644 index 00000000000..fa421a95a44 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVarCheckSideEffects.kt @@ -0,0 +1,31 @@ +// KJS_WITH_FULL_RUNTIME +// WITH_RUNTIME + +class CountingSequence(private val s: Sequence) : Sequence { + var hasNextCtr = 0 + var nextCtr = 0 + + inner class CountingSequenceIterator(private val it: Iterator) : Iterator { + override fun hasNext() = it.hasNext().also { hasNextCtr++ } + override fun next() = it.next().also { nextCtr++ } + } + + override fun iterator() = CountingSequenceIterator(s.iterator()) +} + +val xs = CountingSequence(listOf("a", "b", "c", "d").asSequence()) + +fun box(): String { + val s = StringBuilder() + + for ((_, x) in xs.withIndex()) { + s.append("$x;") + } + + val ss = s.toString() + if (ss != "a;b;c;d;") return "fail: '$ss'" + if (xs.hasNextCtr != 5) return "hasNextCtr != 5, was: '${xs.hasNextCtr}'" + if (xs.nextCtr != 4) return "nextCtr != 4, was: '${xs.nextCtr}'" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/forLoop/forInCharSequenceWithIndex/forInStringWithIndexNoElementVar.kt b/compiler/testData/codegen/bytecodeText/forLoop/forInCharSequenceWithIndex/forInStringWithIndexNoElementVar.kt index 87081d9c43b..790747ca657 100644 --- a/compiler/testData/codegen/bytecodeText/forLoop/forInCharSequenceWithIndex/forInStringWithIndexNoElementVar.kt +++ b/compiler/testData/codegen/bytecodeText/forLoop/forInCharSequenceWithIndex/forInStringWithIndexNoElementVar.kt @@ -19,4 +19,4 @@ fun box(): String { // 0 component1 // 0 component2 // 1 length -// 0 charAt +// 1 charAt diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index d3bfe8cecb6..3ad8d9c6ca7 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -5379,6 +5379,21 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndex.kt"); } + @TestMetadata("forInCharSequenceWithIndexCheckSideEffects.kt") + public void testForInCharSequenceWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexCheckSideEffects.kt"); + } + + @TestMetadata("forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt") + public void testForInCharSequenceWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt"); + } + + @TestMetadata("forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInCharSequenceWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInEmptyStringWithIndex.kt") public void testForInEmptyStringWithIndex() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInEmptyStringWithIndex.kt"); @@ -5422,6 +5437,21 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInEmptyListWithIndex.kt"); } + @TestMetadata("forInIterableWithIndexCheckSideEffects.kt") + public void testForInIterableWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexCheckSideEffects.kt"); + } + + @TestMetadata("forInIterableWithIndexNoElementVarCheckSideEffects.kt") + public void testForInIterableWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoElementVarCheckSideEffects.kt"); + } + + @TestMetadata("forInIterableWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInIterableWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInListWithIndex.kt") public void testForInListWithIndex() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInListWithIndex.kt"); @@ -5470,16 +5500,31 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndex.kt"); } + @TestMetadata("forInSequenceWithIndexCheckSideEffects.kt") + public void testForInSequenceWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexNoElementVar.kt") public void testForInSequenceWithIndexNoElementVar() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVar.kt"); } + @TestMetadata("forInSequenceWithIndexNoElementVarCheckSideEffects.kt") + public void testForInSequenceWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVarCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexNoIndexVar.kt") public void testForInSequenceWithIndexNoIndexVar() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVar.kt"); } + @TestMetadata("forInSequenceWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInSequenceWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexThrowsCME.kt") public void testForInSequenceWithIndexThrowsCME() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexThrowsCME.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index ec0ad484510..5f63154631e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -5379,6 +5379,21 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndex.kt"); } + @TestMetadata("forInCharSequenceWithIndexCheckSideEffects.kt") + public void testForInCharSequenceWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexCheckSideEffects.kt"); + } + + @TestMetadata("forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt") + public void testForInCharSequenceWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt"); + } + + @TestMetadata("forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInCharSequenceWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInEmptyStringWithIndex.kt") public void testForInEmptyStringWithIndex() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInEmptyStringWithIndex.kt"); @@ -5422,6 +5437,21 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInEmptyListWithIndex.kt"); } + @TestMetadata("forInIterableWithIndexCheckSideEffects.kt") + public void testForInIterableWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexCheckSideEffects.kt"); + } + + @TestMetadata("forInIterableWithIndexNoElementVarCheckSideEffects.kt") + public void testForInIterableWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoElementVarCheckSideEffects.kt"); + } + + @TestMetadata("forInIterableWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInIterableWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInListWithIndex.kt") public void testForInListWithIndex() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInListWithIndex.kt"); @@ -5470,16 +5500,31 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndex.kt"); } + @TestMetadata("forInSequenceWithIndexCheckSideEffects.kt") + public void testForInSequenceWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexNoElementVar.kt") public void testForInSequenceWithIndexNoElementVar() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVar.kt"); } + @TestMetadata("forInSequenceWithIndexNoElementVarCheckSideEffects.kt") + public void testForInSequenceWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVarCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexNoIndexVar.kt") public void testForInSequenceWithIndexNoIndexVar() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVar.kt"); } + @TestMetadata("forInSequenceWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInSequenceWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexThrowsCME.kt") public void testForInSequenceWithIndexThrowsCME() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexThrowsCME.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index aa99a02a4a8..f46768d4adf 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -5349,6 +5349,21 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndex.kt"); } + @TestMetadata("forInCharSequenceWithIndexCheckSideEffects.kt") + public void testForInCharSequenceWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexCheckSideEffects.kt"); + } + + @TestMetadata("forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt") + public void testForInCharSequenceWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt"); + } + + @TestMetadata("forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInCharSequenceWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInEmptyStringWithIndex.kt") public void testForInEmptyStringWithIndex() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInEmptyStringWithIndex.kt"); @@ -5392,6 +5407,21 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInEmptyListWithIndex.kt"); } + @TestMetadata("forInIterableWithIndexCheckSideEffects.kt") + public void testForInIterableWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexCheckSideEffects.kt"); + } + + @TestMetadata("forInIterableWithIndexNoElementVarCheckSideEffects.kt") + public void testForInIterableWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoElementVarCheckSideEffects.kt"); + } + + @TestMetadata("forInIterableWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInIterableWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInListWithIndex.kt") public void testForInListWithIndex() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInListWithIndex.kt"); @@ -5440,16 +5470,31 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndex.kt"); } + @TestMetadata("forInSequenceWithIndexCheckSideEffects.kt") + public void testForInSequenceWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexNoElementVar.kt") public void testForInSequenceWithIndexNoElementVar() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVar.kt"); } + @TestMetadata("forInSequenceWithIndexNoElementVarCheckSideEffects.kt") + public void testForInSequenceWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVarCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexNoIndexVar.kt") public void testForInSequenceWithIndexNoIndexVar() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVar.kt"); } + @TestMetadata("forInSequenceWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInSequenceWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexThrowsCME.kt") public void testForInSequenceWithIndexThrowsCME() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexThrowsCME.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index aebde9922a9..effa6d6577f 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -4489,6 +4489,21 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndex.kt"); } + @TestMetadata("forInCharSequenceWithIndexCheckSideEffects.kt") + public void testForInCharSequenceWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexCheckSideEffects.kt"); + } + + @TestMetadata("forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt") + public void testForInCharSequenceWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt"); + } + + @TestMetadata("forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInCharSequenceWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInEmptyStringWithIndex.kt") public void testForInEmptyStringWithIndex() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInEmptyStringWithIndex.kt"); @@ -4532,6 +4547,21 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInEmptyListWithIndex.kt"); } + @TestMetadata("forInIterableWithIndexCheckSideEffects.kt") + public void testForInIterableWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexCheckSideEffects.kt"); + } + + @TestMetadata("forInIterableWithIndexNoElementVarCheckSideEffects.kt") + public void testForInIterableWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoElementVarCheckSideEffects.kt"); + } + + @TestMetadata("forInIterableWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInIterableWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInListWithIndex.kt") public void testForInListWithIndex() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInListWithIndex.kt"); @@ -4575,16 +4605,31 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndex.kt"); } + @TestMetadata("forInSequenceWithIndexCheckSideEffects.kt") + public void testForInSequenceWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexNoElementVar.kt") public void testForInSequenceWithIndexNoElementVar() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVar.kt"); } + @TestMetadata("forInSequenceWithIndexNoElementVarCheckSideEffects.kt") + public void testForInSequenceWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVarCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexNoIndexVar.kt") public void testForInSequenceWithIndexNoIndexVar() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVar.kt"); } + @TestMetadata("forInSequenceWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInSequenceWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexWithExplicitlyTypedIndexVariable.kt") public void testForInSequenceWithIndexWithExplicitlyTypedIndexVariable() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexWithExplicitlyTypedIndexVariable.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 8dc65baa3af..ee81288cfc8 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 @@ -4499,6 +4499,21 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndex.kt"); } + @TestMetadata("forInCharSequenceWithIndexCheckSideEffects.kt") + public void testForInCharSequenceWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexCheckSideEffects.kt"); + } + + @TestMetadata("forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt") + public void testForInCharSequenceWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoElementVarCheckSideEffects.kt"); + } + + @TestMetadata("forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInCharSequenceWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInCharSequenceWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInEmptyStringWithIndex.kt") public void testForInEmptyStringWithIndex() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInCharSequenceWithIndex/forInEmptyStringWithIndex.kt"); @@ -4542,6 +4557,21 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInEmptyListWithIndex.kt"); } + @TestMetadata("forInIterableWithIndexCheckSideEffects.kt") + public void testForInIterableWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexCheckSideEffects.kt"); + } + + @TestMetadata("forInIterableWithIndexNoElementVarCheckSideEffects.kt") + public void testForInIterableWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoElementVarCheckSideEffects.kt"); + } + + @TestMetadata("forInIterableWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInIterableWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInIterableWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInListWithIndex.kt") public void testForInListWithIndex() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInIterableWithIndex/forInListWithIndex.kt"); @@ -4585,16 +4615,31 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndex.kt"); } + @TestMetadata("forInSequenceWithIndexCheckSideEffects.kt") + public void testForInSequenceWithIndexCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexNoElementVar.kt") public void testForInSequenceWithIndexNoElementVar() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVar.kt"); } + @TestMetadata("forInSequenceWithIndexNoElementVarCheckSideEffects.kt") + public void testForInSequenceWithIndexNoElementVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoElementVarCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexNoIndexVar.kt") public void testForInSequenceWithIndexNoIndexVar() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVar.kt"); } + @TestMetadata("forInSequenceWithIndexNoIndexVarCheckSideEffects.kt") + public void testForInSequenceWithIndexNoIndexVarCheckSideEffects() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexNoIndexVarCheckSideEffects.kt"); + } + @TestMetadata("forInSequenceWithIndexWithExplicitlyTypedIndexVariable.kt") public void testForInSequenceWithIndexWithExplicitlyTypedIndexVariable() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forInSequenceWithIndex/forInSequenceWithIndexWithExplicitlyTypedIndexVariable.kt");