JVM: Always invoke get()/charAt() in optimized for-loop over

CharSequence.withIndex(), even if element variable is unused in
destructuring declaration.

#KT-34779 Fixed
This commit is contained in:
Mark Punzalan
2019-11-05 23:42:29 -08:00
committed by Dmitry Petrov
parent 411dc5d60e
commit f444702cf3
16 changed files with 506 additions and 4 deletions
@@ -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");