Skip to content

Commit f8e9d6f

Browse files
vsukharevSpace Team
authored and
Space Team
committed
[IR] Add more complex nonlocal break/continue tests
^KT-56466
1 parent 1d70b6f commit f8e9d6f

File tree

23 files changed

+253
-2
lines changed

23 files changed

+253
-2
lines changed

analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/testData/codegen/box/controlStructures/breakContinueInExpressions/inlinedBreakContinue/loopWithinInlineFunction.kt

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ inline fun <T> Iterable<T>.myForEach(action: (T) -> Unit): Unit {
1212
for (element in this) action(element)
1313
}
1414

15-
16-
fun box(): String {
15+
private fun testMyForEach() {
1716
val visited = mutableListOf<Pair<Int, Int>>()
1817

1918
for (i in 1..3) {
@@ -26,5 +25,57 @@ fun box(): String {
2625
}
2726

2827
assertEquals(listOf(1 to 1, 1 to 2), visited)
28+
}
29+
30+
inline fun <T> Iterable<T>.myForEachWithBreak(dealBreaker: T, action: (T) -> Unit): Unit {
31+
for (element in this) {
32+
if (element == dealBreaker)
33+
break
34+
action(element)
35+
}
36+
}
37+
38+
private fun testMyForEachWithBreak() {
39+
val visited = mutableListOf<Pair<Int, Int>>()
40+
41+
for (i in 1..3) {
42+
(1..3).myForEachWithBreak(3) { j ->
43+
if (i == 3) {
44+
break
45+
}
46+
visited += i to j
47+
}
48+
}
49+
50+
assertEquals(listOf(1 to 1, 1 to 2, 2 to 1, 2 to 2), visited)
51+
}
52+
53+
inline fun <T> Iterable<T>.myForEachWithContinue(skipper: T, action: (T) -> Unit): Unit {
54+
for (element in this) {
55+
if (element == skipper)
56+
continue
57+
action(element)
58+
}
59+
}
60+
61+
private fun testMyForEachWithContinue() {
62+
val visited = mutableListOf<Pair<Int, Int>>()
63+
64+
for (i in 1..3) {
65+
(1..3).myForEachWithContinue(2) { j ->
66+
if (j == 3) {
67+
break
68+
}
69+
visited += i to j
70+
}
71+
}
72+
73+
assertEquals(listOf(1 to 1), visited)
74+
}
75+
76+
fun box(): String {
77+
testMyForEach()
78+
testMyForEachWithBreak()
79+
testMyForEachWithContinue()
2980
return "OK"
3081
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// LANGUAGE: +BreakContinueInInlineLambdas
2+
// IGNORE_BACKEND: JVM
3+
// WITH_STDLIB
4+
5+
inline fun foo(block: () -> Int): Int = block()
6+
7+
fun box(): String {
8+
val resultNonLabeled = testNonLabeledBreaks()
9+
if (resultNonLabeled != (1)+(1+2)+(1+2)+(1+2)) return "FAIL testNonLabeledBreaks: $resultNonLabeled"
10+
11+
val resultLabeled = testLabeledBreaks()
12+
if (resultLabeled != (1)+(1+2)) return "FAIL testLabeledBreaks: $resultLabeled"
13+
14+
val resultForEach = testForEach()
15+
if (resultForEach != (1)+(1+2)) return "FAIL testForEach: $resultForEach"
16+
return "OK"
17+
}
18+
19+
private fun testNonLabeledBreaks(): Int {
20+
var sum = 0
21+
22+
for (i in 1..10) {
23+
sum += foo {
24+
if (i == 5) break else {
25+
var innerSum = 0
26+
for (j in 1..i) {
27+
innerSum += foo {
28+
if (j == 3) break else j
29+
}
30+
}
31+
innerSum
32+
}
33+
}
34+
}
35+
return sum
36+
}
37+
38+
private fun testLabeledBreaks(): Int {
39+
var sum = 0
40+
41+
outer@
42+
for (i in 1..10) {
43+
sum += foo {
44+
if (i == 5) break else {
45+
var innerSum = 0
46+
for (j in 1..i) {
47+
innerSum += foo {
48+
if (j == 3) break@outer else j
49+
}
50+
}
51+
innerSum
52+
}
53+
}
54+
}
55+
return sum
56+
}
57+
58+
private fun testForEach(): Int {
59+
var sum = 0
60+
61+
for (i in 1..10) {
62+
sum += foo {
63+
if (i == 5) break else {
64+
var innerSum = 0
65+
(1..i).forEach { j: Int ->
66+
innerSum += foo {
67+
if (j == 3) break else j // breaks not `forEach`, but outer `for`, so similar to `break@outer`
68+
}
69+
}
70+
innerSum
71+
}
72+
}
73+
}
74+
return sum
75+
}

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)