Adjust testData to new labels syntax

This commit is contained in:
Denis Zharkov
2015-04-27 14:39:46 +03:00
parent 5977302465
commit 44a55e5bf6
191 changed files with 747 additions and 747 deletions
@@ -89,7 +89,7 @@ sink:
fun t3() {
try {
1
@l{ () ->
l@{ () ->
if (2 > 3) {
return@l
}
@@ -101,12 +101,12 @@ fun t3() {
---------------------
L0:
1 <START>
2 mark({ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } })
mark(try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 })
jmp?(L2) NEXT:[mark({ 2 }), mark({ 1 @l{ () -> if (2 > 3) { return@l } } })]
3 mark({ 1 @l{ () -> if (2 > 3) { return@l } } })
2 mark({ try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 } })
mark(try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 })
jmp?(L2) NEXT:[mark({ 2 }), mark({ 1 l@{ () -> if (2 > 3) { return@l } } })]
3 mark({ 1 l@{ () -> if (2 > 3) { return@l } } })
r(1) -> <v0>
mark(@l{ () -> if (2 > 3) { return@l } })
mark(l@{ () -> if (2 > 3) { return@l } })
mark({ () -> if (2 > 3) { return@l } })
jmp?(L3) NEXT:[r({ () -> if (2 > 3) { return@l } }) -> <v1>, d({ () -> if (2 > 3) { return@l } })]
d({ () -> if (2 > 3) { return@l } }) NEXT:[<SINK>]
@@ -123,7 +123,7 @@ L8 [skipFinallyToErrorBlock]:
L11 [copy of L2, onExceptionToFinallyBlock]:
3 mark({ 2 }) PREV:[jmp(L8)]
r(2) -> <v2>
2 merge(try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 }|<v1>) -> <v3>
2 merge(try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 }|<v1>) -> <v3>
L1:
1 <END> NEXT:[<SINK>]
error:
@@ -163,7 +163,7 @@ sink:
=====================
== t4 ==
fun t4() {
@l{ () ->
l@{ () ->
try {
1
if (2 > 3) {
@@ -177,8 +177,8 @@ fun t4() {
---------------------
L0:
1 <START>
2 mark({ @l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } })
mark(@l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } })
2 mark({ l@{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } })
mark(l@{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } })
mark({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } })
jmp?(L2) NEXT:[r({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } }) -> <v0>, d({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } })]
d({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } }) NEXT:[<SINK>]
@@ -245,11 +245,11 @@ sink:
=====================
== t5 ==
fun t5() {
@l while(true) {
l@ while(true) {
try {
1
if (2 > 3) {
break @l
break@l
}
} finally {
2
@@ -259,63 +259,63 @@ fun t5() {
---------------------
L0:
1 <START>
2 mark({ @l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } })
mark(@l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } })
2 mark({ l@ while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } } })
mark(l@ while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } })
L2 [loop entry point]:
L6 [condition entry point]:
r(true) -> <v0> PREV:[mark(@l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } }), jmp(L2)]
mark(while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } })
r(true) -> <v0> PREV:[mark(l@ while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } }), jmp(L2)]
mark(while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } })
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
L4 [body entry point]:
3 mark({ try { 1 if (2 > 3) { break @l } } finally { 2 } })
mark(try { 1 if (2 > 3) { break @l } } finally { 2 })
jmp?(L7) NEXT:[mark({ 2 }), mark({ 1 if (2 > 3) { break @l } })]
4 mark({ 1 if (2 > 3) { break @l } })
3 mark({ try { 1 if (2 > 3) { break@l } } finally { 2 } })
mark(try { 1 if (2 > 3) { break@l } } finally { 2 })
jmp?(L7) NEXT:[mark({ 2 }), mark({ 1 if (2 > 3) { break@l } })]
4 mark({ 1 if (2 > 3) { break@l } })
r(1) -> <v2>
mark(if (2 > 3) { break @l })
mark(if (2 > 3) { break@l })
r(2) -> <v3>
r(3) -> <v4>
mark(2 > 3)
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
jf(L8|<v5>) NEXT:[read (Unit), mark({ break @l })]
5 mark({ break @l })
jf(L8|<v5>) NEXT:[read (Unit), mark({ break@l })]
5 mark({ break@l })
L9 [start finally]:
6 mark({ 2 })
r(2) -> <v6>
L10 [finish finally]:
5 jmp(L3) NEXT:[read (Unit)]
- 4 jmp(L11) NEXT:[merge(if (2 > 3) { break @l }|!<v7>) -> <v8>] PREV:[]
5 jmp(L3) NEXT:[read (Unit)]
- 4 jmp(L11) NEXT:[merge(if (2 > 3) { break@l }|!<v7>) -> <v8>] PREV:[]
L8 [else branch]:
read (Unit) PREV:[jf(L8|<v5>)]
read (Unit) PREV:[jf(L8|<v5>)]
L11 ['if' expression result]:
merge(if (2 > 3) { break @l }|!<v7>) -> <v8>
3 jmp(L12) NEXT:[mark({ 2 })]
merge(if (2 > 3) { break@l }|!<v7>) -> <v8>
3 jmp(L12) NEXT:[mark({ 2 })]
L7 [onExceptionToFinallyBlock]:
6 mark({ 2 }) PREV:[jmp?(L7)]
6 mark({ 2 }) PREV:[jmp?(L7)]
r(2) -> <v6>
3 jmp(error) NEXT:[<ERROR>]
3 jmp(error) NEXT:[<ERROR>]
L12 [skipFinallyToErrorBlock]:
6 mark({ 2 }) PREV:[jmp(L12)]
6 mark({ 2 }) PREV:[jmp(L12)]
r(2) -> <v6>
3 merge(try { 1 if (2 > 3) { break @l } } finally { 2 }|<v8>) -> <v9>
2 jmp(L2) NEXT:[r(true) -> <v0>]
3 merge(try { 1 if (2 > 3) { break@l } } finally { 2 }|<v8>) -> <v9>
2 jmp(L2) NEXT:[r(true) -> <v0>]
L3 [loop exit point]:
L5 [body exit point]:
read (Unit) PREV:[jmp(L3)]
read (Unit) PREV:[jmp(L3)]
L1:
1 <END> NEXT:[<SINK>]
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[jmp(error)]
<ERROR> PREV:[jmp(error)]
sink:
<SINK> PREV:[<ERROR>, <END>]
<SINK> PREV:[<ERROR>, <END>]
=====================
== t6 ==
fun t6() {
try {
@l while(true) {
l@ while(true) {
1
if (2 > 3) {
break @l
break@l
}
}
5
@@ -326,114 +326,49 @@ fun t6() {
---------------------
L0:
1 <START>
2 mark({ try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } })
mark(try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 })
jmp?(L2) NEXT:[mark({ 2 }), mark({ @l while(true) { 1 if (2 > 3) { break @l } } 5 })]
3 mark({ @l while(true) { 1 if (2 > 3) { break @l } } 5 })
mark(@l while(true) { 1 if (2 > 3) { break @l } })
2 mark({ try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 } })
mark(try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 })
jmp?(L2) NEXT:[mark({ 2 }), mark({ l@ while(true) { 1 if (2 > 3) { break@l } } 5 })]
3 mark({ l@ while(true) { 1 if (2 > 3) { break@l } } 5 })
mark(l@ while(true) { 1 if (2 > 3) { break@l } })
L3 [loop entry point]:
L7 [condition entry point]:
r(true) -> <v0> PREV:[mark(@l while(true) { 1 if (2 > 3) { break @l } }), jmp(L3)]
mark(while(true) { 1 if (2 > 3) { break @l } })
r(true) -> <v0> PREV:[mark(l@ while(true) { 1 if (2 > 3) { break@l } }), jmp(L3)]
mark(while(true) { 1 if (2 > 3) { break@l } })
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
L5 [body entry point]:
4 mark({ 1 if (2 > 3) { break @l } })
4 mark({ 1 if (2 > 3) { break@l } })
r(1) -> <v2>
mark(if (2 > 3) { break @l })
mark(if (2 > 3) { break@l })
r(2) -> <v3>
r(3) -> <v4>
mark(2 > 3)
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
jf(L8|<v5>) NEXT:[read (Unit), mark({ break @l })]
5 mark({ break @l })
jmp(L4) NEXT:[read (Unit)]
- 4 jmp(L9) NEXT:[merge(if (2 > 3) { break @l }|!<v6>) -> <v7>] PREV:[]
L8 [else branch]:
read (Unit) PREV:[jf(L8|<v5>)]
L9 ['if' expression result]:
merge(if (2 > 3) { break @l }|!<v6>) -> <v7>
3 jmp(L3) NEXT:[r(true) -> <v0>]
L4 [loop exit point]:
L6 [body exit point]:
read (Unit) PREV:[jmp(L4)]
r(5) -> <v9>
2 jmp(L10) NEXT:[mark({ 2 })]
L2 [onExceptionToFinallyBlock]:
L11 [start finally]:
3 mark({ 2 }) PREV:[jmp?(L2)]
r(2) -> <v10>
L12 [finish finally]:
2 jmp(error) NEXT:[<ERROR>]
L10 [skipFinallyToErrorBlock]:
L13 [copy of L2, onExceptionToFinallyBlock]:
3 mark({ 2 }) PREV:[jmp(L10)]
r(2) -> <v10>
2 merge(try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 }|<v9>) -> <v11>
L1:
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[jmp(error)]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
== t7 ==
fun t7() {
try {
@l while(true) {
1
if (2 > 3) {
break @l
}
}
} finally {
2
}
}
---------------------
L0:
1 <START>
2 mark({ try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 } })
mark(try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 })
jmp?(L2) NEXT:[mark({ 2 }), mark({ @l while(true) { 1 if (2 > 3) { break @l } } })]
3 mark({ @l while(true) { 1 if (2 > 3) { break @l } } })
mark(@l while(true) { 1 if (2 > 3) { break @l } })
L3 [loop entry point]:
L7 [condition entry point]:
r(true) -> <v0> PREV:[mark(@l while(true) { 1 if (2 > 3) { break @l } }), jmp(L3)]
mark(while(true) { 1 if (2 > 3) { break @l } })
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
L5 [body entry point]:
4 mark({ 1 if (2 > 3) { break @l } })
r(1) -> <v2>
mark(if (2 > 3) { break @l })
r(2) -> <v3>
r(3) -> <v4>
mark(2 > 3)
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
jf(L8|<v5>) NEXT:[read (Unit), mark({ break @l })]
5 mark({ break @l })
jf(L8|<v5>) NEXT:[read (Unit), mark({ break@l })]
5 mark({ break@l })
jmp(L4) NEXT:[read (Unit)]
- 4 jmp(L9) NEXT:[merge(if (2 > 3) { break @l }|!<v6>) -> <v7>] PREV:[]
- 4 jmp(L9) NEXT:[merge(if (2 > 3) { break@l }|!<v6>) -> <v7>] PREV:[]
L8 [else branch]:
read (Unit) PREV:[jf(L8|<v5>)]
L9 ['if' expression result]:
merge(if (2 > 3) { break @l }|!<v6>) -> <v7>
merge(if (2 > 3) { break@l }|!<v6>) -> <v7>
3 jmp(L3) NEXT:[r(true) -> <v0>]
L4 [loop exit point]:
L6 [body exit point]:
read (Unit) PREV:[jmp(L4)]
r(5) -> <v9>
2 jmp(L10) NEXT:[mark({ 2 })]
L2 [onExceptionToFinallyBlock]:
L11 [start finally]:
3 mark({ 2 }) PREV:[jmp?(L2)]
r(2) -> <v9>
r(2) -> <v10>
L12 [finish finally]:
2 jmp(error) NEXT:[<ERROR>]
L10 [skipFinallyToErrorBlock]:
L13 [copy of L2, onExceptionToFinallyBlock]:
3 mark({ 2 }) PREV:[jmp(L10)]
r(2) -> <v9>
2 merge(try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 }|!<v8>) -> <v10>
r(2) -> <v10>
2 merge(try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 }|<v9>) -> <v11>
L1:
1 <END> NEXT:[<SINK>]
error:
@@ -441,13 +376,78 @@ error:
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
== t7 ==
fun t7() {
try {
l@ while(true) {
1
if (2 > 3) {
break@l
}
}
} finally {
2
}
}
---------------------
L0:
1 <START>
2 mark({ try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 } })
mark(try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 })
jmp?(L2) NEXT:[mark({ 2 }), mark({ l@ while(true) { 1 if (2 > 3) { break@l } } })]
3 mark({ l@ while(true) { 1 if (2 > 3) { break@l } } })
mark(l@ while(true) { 1 if (2 > 3) { break@l } })
L3 [loop entry point]:
L7 [condition entry point]:
r(true) -> <v0> PREV:[mark(l@ while(true) { 1 if (2 > 3) { break@l } }), jmp(L3)]
mark(while(true) { 1 if (2 > 3) { break@l } })
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
L5 [body entry point]:
4 mark({ 1 if (2 > 3) { break@l } })
r(1) -> <v2>
mark(if (2 > 3) { break@l })
r(2) -> <v3>
r(3) -> <v4>
mark(2 > 3)
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
jf(L8|<v5>) NEXT:[read (Unit), mark({ break@l })]
5 mark({ break@l })
jmp(L4) NEXT:[read (Unit)]
- 4 jmp(L9) NEXT:[merge(if (2 > 3) { break@l }|!<v6>) -> <v7>] PREV:[]
L8 [else branch]:
read (Unit) PREV:[jf(L8|<v5>)]
L9 ['if' expression result]:
merge(if (2 > 3) { break@l }|!<v6>) -> <v7>
3 jmp(L3) NEXT:[r(true) -> <v0>]
L4 [loop exit point]:
L6 [body exit point]:
read (Unit) PREV:[jmp(L4)]
2 jmp(L10) NEXT:[mark({ 2 })]
L2 [onExceptionToFinallyBlock]:
L11 [start finally]:
3 mark({ 2 }) PREV:[jmp?(L2)]
r(2) -> <v9>
L12 [finish finally]:
2 jmp(error) NEXT:[<ERROR>]
L10 [skipFinallyToErrorBlock]:
L13 [copy of L2, onExceptionToFinallyBlock]:
3 mark({ 2 }) PREV:[jmp(L10)]
r(2) -> <v9>
2 merge(try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 }|!<v8>) -> <v10>
L1:
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[jmp(error)]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
== t8 ==
fun t8(a : Int) {
@l for (i in 1..a) {
l@ for (i in 1..a) {
try {
1
if (2 > 3) {
continue @l
continue@l
}
} finally {
2
@@ -460,8 +460,8 @@ L0:
v(a : Int)
magic[FAKE_INITIALIZER](a : Int) -> <v0>
w(a|<v0>)
2 mark({ @l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } })
mark(@l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } })
2 mark({ l@ for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } } })
mark(l@ for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } })
3 r(1) -> <v1>
r(a) -> <v2>
mark(1..a)
@@ -469,60 +469,60 @@ L0:
v(i)
L2 [loop entry point]:
L6 [condition entry point]:
jmp?(L3) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L6), jmp(L2)]
jmp?(L3) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L6), jmp(L2)]
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
w(i|<v4>)
mark(for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } })
mark(for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } })
L4 [body entry point]:
4 mark({ try { 1 if (2 > 3) { continue @l } } finally { 2 } })
mark(try { 1 if (2 > 3) { continue @l } } finally { 2 })
jmp?(L7) NEXT:[mark({ 2 }), mark({ 1 if (2 > 3) { continue @l } })]
5 mark({ 1 if (2 > 3) { continue @l } })
4 mark({ try { 1 if (2 > 3) { continue@l } } finally { 2 } })
mark(try { 1 if (2 > 3) { continue@l } } finally { 2 })
jmp?(L7) NEXT:[mark({ 2 }), mark({ 1 if (2 > 3) { continue@l } })]
5 mark({ 1 if (2 > 3) { continue@l } })
r(1) -> <v5>
mark(if (2 > 3) { continue @l })
mark(if (2 > 3) { continue@l })
r(2) -> <v6>
r(3) -> <v7>
mark(2 > 3)
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue @l })]
6 mark({ continue @l })
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue@l })]
6 mark({ continue@l })
L9 [start finally]:
7 mark({ 2 })
r(2) -> <v9>
L10 [finish finally]:
6 jmp(L6) NEXT:[jmp?(L3)]
- 5 jmp(L11) NEXT:[merge(if (2 > 3) { continue @l }|!<v10>) -> <v11>] PREV:[]
6 jmp(L6) NEXT:[jmp?(L3)]
- 5 jmp(L11) NEXT:[merge(if (2 > 3) { continue@l }|!<v10>) -> <v11>] PREV:[]
L8 [else branch]:
read (Unit) PREV:[jf(L8|<v8>)]
read (Unit) PREV:[jf(L8|<v8>)]
L11 ['if' expression result]:
merge(if (2 > 3) { continue @l }|!<v10>) -> <v11>
4 jmp(L12) NEXT:[mark({ 2 })]
merge(if (2 > 3) { continue@l }|!<v10>) -> <v11>
4 jmp(L12) NEXT:[mark({ 2 })]
L7 [onExceptionToFinallyBlock]:
7 mark({ 2 }) PREV:[jmp?(L7)]
7 mark({ 2 }) PREV:[jmp?(L7)]
r(2) -> <v9>
4 jmp(error) NEXT:[<ERROR>]
4 jmp(error) NEXT:[<ERROR>]
L12 [skipFinallyToErrorBlock]:
7 mark({ 2 }) PREV:[jmp(L12)]
7 mark({ 2 }) PREV:[jmp(L12)]
r(2) -> <v9>
4 merge(try { 1 if (2 > 3) { continue @l } } finally { 2 }|<v11>) -> <v12>
3 jmp(L2) NEXT:[jmp?(L3)]
4 merge(try { 1 if (2 > 3) { continue@l } } finally { 2 }|<v11>) -> <v12>
3 jmp(L2) NEXT:[jmp?(L3)]
L3 [loop exit point]:
L5 [body exit point]:
read (Unit) PREV:[jmp?(L3)]
read (Unit) PREV:[jmp?(L3)]
L1:
1 <END> NEXT:[<SINK>]
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[jmp(error)]
<ERROR> PREV:[jmp(error)]
sink:
<SINK> PREV:[<ERROR>, <END>]
<SINK> PREV:[<ERROR>, <END>]
=====================
== t9 ==
fun t9(a : Int) {
try {
@l for (i in 1..a) {
l@ for (i in 1..a) {
1
if (2 > 3) {
continue @l
continue@l
}
}
5
@@ -536,86 +536,11 @@ L0:
v(a : Int)
magic[FAKE_INITIALIZER](a : Int) -> <v0>
w(a|<v0>)
2 mark({ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } })
mark(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 })
jmp?(L2) NEXT:[mark({ 2 }), mark({ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 })]
3 mark({ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 })
mark(@l for (i in 1..a) { 1 if (2 > 3) { continue @l } })
4 r(1) -> <v1>
r(a) -> <v2>
mark(1..a)
call(1..a, rangeTo|<v1>, <v2>) -> <v3>
v(i)
L3 [loop entry point]:
L7 [condition entry point]:
jmp?(L4) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L7), jmp(L3)]
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
w(i|<v4>)
mark(for (i in 1..a) { 1 if (2 > 3) { continue @l } })
L5 [body entry point]:
5 mark({ 1 if (2 > 3) { continue @l } })
r(1) -> <v5>
mark(if (2 > 3) { continue @l })
r(2) -> <v6>
r(3) -> <v7>
mark(2 > 3)
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue @l })]
6 mark({ continue @l })
jmp(L7) NEXT:[jmp?(L4)]
- 5 jmp(L9) NEXT:[merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>] PREV:[]
L8 [else branch]:
read (Unit) PREV:[jf(L8|<v8>)]
L9 ['if' expression result]:
merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>
4 jmp(L3) NEXT:[jmp?(L4)]
L4 [loop exit point]:
L6 [body exit point]:
read (Unit) PREV:[jmp?(L4)]
3 r(5) -> <v12>
2 jmp(L10) NEXT:[mark({ 2 })]
L2 [onExceptionToFinallyBlock]:
L11 [start finally]:
3 mark({ 2 }) PREV:[jmp?(L2)]
r(2) -> <v13>
L12 [finish finally]:
2 jmp(error) NEXT:[<ERROR>]
L10 [skipFinallyToErrorBlock]:
L13 [copy of L2, onExceptionToFinallyBlock]:
3 mark({ 2 }) PREV:[jmp(L10)]
r(2) -> <v13>
2 merge(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 }|<v12>) -> <v14>
L1:
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[jmp(error)]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
== t10 ==
fun t10(a : Int) {
try {
@l for (i in 1..a) {
1
if (2 > 3) {
continue @l
}
}
} finally {
2
}
}
---------------------
L0:
1 <START>
v(a : Int)
magic[FAKE_INITIALIZER](a : Int) -> <v0>
w(a|<v0>)
2 mark({ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 } })
mark(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 })
jmp?(L2) NEXT:[mark({ 2 }), mark({ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } })]
3 mark({ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } })
mark(@l for (i in 1..a) { 1 if (2 > 3) { continue @l } })
2 mark({ try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 } })
mark(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 })
jmp?(L2) NEXT:[mark({ 2 }), mark({ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 })]
3 mark({ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 })
mark(l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } })
4 r(1) -> <v1>
r(a) -> <v2>
mark(1..a)
@@ -626,39 +551,40 @@ L7 [condition entry point]:
jmp?(L4) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L7), jmp(L3)]
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
w(i|<v4>)
mark(for (i in 1..a) { 1 if (2 > 3) { continue @l } })
mark(for (i in 1..a) { 1 if (2 > 3) { continue@l } })
L5 [body entry point]:
5 mark({ 1 if (2 > 3) { continue @l } })
5 mark({ 1 if (2 > 3) { continue@l } })
r(1) -> <v5>
mark(if (2 > 3) { continue @l })
mark(if (2 > 3) { continue@l })
r(2) -> <v6>
r(3) -> <v7>
mark(2 > 3)
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue @l })]
6 mark({ continue @l })
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue@l })]
6 mark({ continue@l })
jmp(L7) NEXT:[jmp?(L4)]
- 5 jmp(L9) NEXT:[merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>] PREV:[]
- 5 jmp(L9) NEXT:[merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>] PREV:[]
L8 [else branch]:
read (Unit) PREV:[jf(L8|<v8>)]
L9 ['if' expression result]:
merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>
merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>
4 jmp(L3) NEXT:[jmp?(L4)]
L4 [loop exit point]:
L6 [body exit point]:
read (Unit) PREV:[jmp?(L4)]
3 r(5) -> <v12>
2 jmp(L10) NEXT:[mark({ 2 })]
L2 [onExceptionToFinallyBlock]:
L11 [start finally]:
3 mark({ 2 }) PREV:[jmp?(L2)]
r(2) -> <v12>
r(2) -> <v13>
L12 [finish finally]:
2 jmp(error) NEXT:[<ERROR>]
L10 [skipFinallyToErrorBlock]:
L13 [copy of L2, onExceptionToFinallyBlock]:
3 mark({ 2 }) PREV:[jmp(L10)]
r(2) -> <v12>
2 merge(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 }|!<v11>) -> <v13>
r(2) -> <v13>
2 merge(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 }|<v12>) -> <v14>
L1:
1 <END> NEXT:[<SINK>]
error:
@@ -666,6 +592,80 @@ error:
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
== t10 ==
fun t10(a : Int) {
try {
l@ for (i in 1..a) {
1
if (2 > 3) {
continue@l
}
}
} finally {
2
}
}
---------------------
L0:
1 <START>
v(a : Int)
magic[FAKE_INITIALIZER](a : Int) -> <v0>
w(a|<v0>)
2 mark({ try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } finally { 2 } })
mark(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } finally { 2 })
jmp?(L2) NEXT:[mark({ 2 }), mark({ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } })]
3 mark({ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } })
mark(l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } })
4 r(1) -> <v1>
r(a) -> <v2>
mark(1..a)
call(1..a, rangeTo|<v1>, <v2>) -> <v3>
v(i)
L3 [loop entry point]:
L7 [condition entry point]:
jmp?(L4) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L7), jmp(L3)]
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
w(i|<v4>)
mark(for (i in 1..a) { 1 if (2 > 3) { continue@l } })
L5 [body entry point]:
5 mark({ 1 if (2 > 3) { continue@l } })
r(1) -> <v5>
mark(if (2 > 3) { continue@l })
r(2) -> <v6>
r(3) -> <v7>
mark(2 > 3)
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue@l })]
6 mark({ continue@l })
jmp(L7) NEXT:[jmp?(L4)]
- 5 jmp(L9) NEXT:[merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>] PREV:[]
L8 [else branch]:
read (Unit) PREV:[jf(L8|<v8>)]
L9 ['if' expression result]:
merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>
4 jmp(L3) NEXT:[jmp?(L4)]
L4 [loop exit point]:
L6 [body exit point]:
read (Unit) PREV:[jmp?(L4)]
2 jmp(L10) NEXT:[mark({ 2 })]
L2 [onExceptionToFinallyBlock]:
L11 [start finally]:
3 mark({ 2 }) PREV:[jmp?(L2)]
r(2) -> <v12>
L12 [finish finally]:
2 jmp(error) NEXT:[<ERROR>]
L10 [skipFinallyToErrorBlock]:
L13 [copy of L2, onExceptionToFinallyBlock]:
3 mark({ 2 }) PREV:[jmp(L10)]
r(2) -> <v12>
2 merge(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } finally { 2 }|!<v11>) -> <v13>
L1:
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[jmp(error)]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
== t11 ==
fun t11() {
try {
@@ -20,7 +20,7 @@ fun t2() {
fun t3() {
try {
1
@l{ () ->
l@{ () ->
if (2 > 3) {
return@l
}
@@ -31,7 +31,7 @@ fun t3() {
}
fun t4() {
@l{ () ->
l@{ () ->
try {
1
if (2 > 3) {
@@ -44,11 +44,11 @@ fun t4() {
}
fun t5() {
@l while(true) {
l@ while(true) {
try {
1
if (2 > 3) {
break @l
break@l
}
} finally {
2
@@ -58,10 +58,10 @@ fun t5() {
fun t6() {
try {
@l while(true) {
l@ while(true) {
1
if (2 > 3) {
break @l
break@l
}
}
5
@@ -72,10 +72,10 @@ fun t6() {
fun t7() {
try {
@l while(true) {
l@ while(true) {
1
if (2 > 3) {
break @l
break@l
}
}
} finally {
@@ -84,11 +84,11 @@ fun t7() {
}
fun t8(a : Int) {
@l for (i in 1..a) {
l@ for (i in 1..a) {
try {
1
if (2 > 3) {
continue @l
continue@l
}
} finally {
2
@@ -98,10 +98,10 @@ fun t8(a : Int) {
fun t9(a : Int) {
try {
@l for (i in 1..a) {
l@ for (i in 1..a) {
1
if (2 > 3) {
continue @l
continue@l
}
}
5
@@ -112,10 +112,10 @@ fun t9(a : Int) {
fun t10(a : Int) {
try {
@l for (i in 1..a) {
l@ for (i in 1..a) {
1
if (2 > 3) {
continue @l
continue@l
}
}
} finally {
@@ -43,7 +43,7 @@ try { 1 if (2 > 3) { return } } finally { 2 } <v7>: *
fun t3() {
try {
1
@l{ () ->
l@{ () ->
if (2 > 3) {
return@l
}
@@ -55,12 +55,12 @@ fun t3() {
---------------------
1 <v0>: * NEW: r(1) -> <v0>
{ () -> if (2 > 3) { return@l } } <v1>: * NEW: r({ () -> if (2 > 3) { return@l } }) -> <v1>
@l{ () -> if (2 > 3) { return@l } } <v1>: * COPY
{ 1 @l{ () -> if (2 > 3) { return@l } } } <v1>: * COPY
l@{ () -> if (2 > 3) { return@l } } <v1>: * COPY
{ 1 l@{ () -> if (2 > 3) { return@l } } } <v1>: * COPY
2 <v2>: * NEW: r(2) -> <v2>
{ 2 } <v2>: * COPY
try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } <v3>: * NEW: merge(try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 }|<v1>) -> <v3>
{ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } } <v3>: * COPY
try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 } <v3>: * NEW: merge(try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 }|<v1>) -> <v3>
{ try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 } } <v3>: * COPY
=====================
== anonymous_0 ==
{ () ->
@@ -79,7 +79,7 @@ if (2 > 3) { return@l } <v4>: * COPY
=====================
== t4 ==
fun t4() {
@l{ () ->
l@{ () ->
try {
1
if (2 > 3) {
@@ -92,8 +92,8 @@ fun t4() {
}
---------------------
{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } <v0>: * NEW: r({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } }) -> <v0>
@l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } <v0>: * COPY
{ @l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } } <v0>: * COPY
l@{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } <v0>: * COPY
{ l@{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } } <v0>: * COPY
=====================
== anonymous_1 ==
{ () ->
@@ -122,11 +122,11 @@ try { 1 if (2 > 3) { return@l } } finally { 2 } <v7>: * C
=====================
== t5 ==
fun t5() {
@l while(true) {
l@ while(true) {
try {
1
if (2 > 3) {
break @l
break@l
}
} finally {
2
@@ -134,31 +134,31 @@ fun t5() {
}
}
---------------------
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
true <v0>: Boolean NEW: r(true) -> <v0>
1 <v2>: * NEW: r(1) -> <v2>
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
3 <v4>: Int NEW: r(3) -> <v4>
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
break @l !<v7>: *
{ break @l } !<v7>: * COPY
if (2 > 3) { break @l } <v8>: * NEW: merge(if (2 > 3) { break @l }|!<v7>) -> <v8>
{ 1 if (2 > 3) { break @l } } <v8>: * COPY
2 <v6>: * NEW: r(2) -> <v6>
{ 2 } <v6>: * COPY
try { 1 if (2 > 3) { break @l } } finally { 2 } <v9>: * NEW: merge(try { 1 if (2 > 3) { break @l } } finally { 2 }|<v8>) -> <v9>
{ try { 1 if (2 > 3) { break @l } } finally { 2 } } <v9>: * COPY
while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } !<v10>: *
@l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } !<v10>: * COPY
{ @l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } } !<v10>: * COPY
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
true <v0>: Boolean NEW: r(true) -> <v0>
1 <v2>: * NEW: r(1) -> <v2>
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
3 <v4>: Int NEW: r(3) -> <v4>
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
break@l !<v7>: *
{ break@l } !<v7>: * COPY
if (2 > 3) { break@l } <v8>: * NEW: merge(if (2 > 3) { break@l }|!<v7>) -> <v8>
{ 1 if (2 > 3) { break@l } } <v8>: * COPY
2 <v6>: * NEW: r(2) -> <v6>
{ 2 } <v6>: * COPY
try { 1 if (2 > 3) { break@l } } finally { 2 } <v9>: * NEW: merge(try { 1 if (2 > 3) { break@l } } finally { 2 }|<v8>) -> <v9>
{ try { 1 if (2 > 3) { break@l } } finally { 2 } } <v9>: * COPY
while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } } !<v10>: *
l@ while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } } !<v10>: * COPY
{ l@ while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } } } !<v10>: * COPY
=====================
== t6 ==
fun t6() {
try {
@l while(true) {
l@ while(true) {
1
if (2 > 3) {
break @l
break@l
}
}
5
@@ -167,32 +167,32 @@ fun t6() {
}
}
---------------------
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
true <v0>: Boolean NEW: r(true) -> <v0>
1 <v2>: * NEW: r(1) -> <v2>
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
3 <v4>: Int NEW: r(3) -> <v4>
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
break @l !<v6>: *
{ break @l } !<v6>: * COPY
if (2 > 3) { break @l } <v7>: * NEW: merge(if (2 > 3) { break @l }|!<v6>) -> <v7>
{ 1 if (2 > 3) { break @l } } <v7>: * COPY
while(true) { 1 if (2 > 3) { break @l } } !<v8>: *
@l while(true) { 1 if (2 > 3) { break @l } } !<v8>: * COPY
5 <v9>: * NEW: r(5) -> <v9>
{ @l while(true) { 1 if (2 > 3) { break @l } } 5 } <v9>: * COPY
2 <v10>: * NEW: r(2) -> <v10>
{ 2 } <v10>: * COPY
try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } <v11>: * NEW: merge(try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 }|<v9>) -> <v11>
{ try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } } <v11>: * COPY
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
true <v0>: Boolean NEW: r(true) -> <v0>
1 <v2>: * NEW: r(1) -> <v2>
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
3 <v4>: Int NEW: r(3) -> <v4>
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
break@l !<v6>: *
{ break@l } !<v6>: * COPY
if (2 > 3) { break@l } <v7>: * NEW: merge(if (2 > 3) { break@l }|!<v6>) -> <v7>
{ 1 if (2 > 3) { break@l } } <v7>: * COPY
while(true) { 1 if (2 > 3) { break@l } } !<v8>: *
l@ while(true) { 1 if (2 > 3) { break@l } } !<v8>: * COPY
5 <v9>: * NEW: r(5) -> <v9>
{ l@ while(true) { 1 if (2 > 3) { break@l } } 5 } <v9>: * COPY
2 <v10>: * NEW: r(2) -> <v10>
{ 2 } <v10>: * COPY
try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 } <v11>: * NEW: merge(try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 }|<v9>) -> <v11>
{ try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 } } <v11>: * COPY
=====================
== t7 ==
fun t7() {
try {
@l while(true) {
l@ while(true) {
1
if (2 > 3) {
break @l
break@l
}
}
} finally {
@@ -200,31 +200,31 @@ fun t7() {
}
}
---------------------
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
true <v0>: Boolean NEW: r(true) -> <v0>
1 <v2>: * NEW: r(1) -> <v2>
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
3 <v4>: Int NEW: r(3) -> <v4>
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
break @l !<v6>: *
{ break @l } !<v6>: * COPY
if (2 > 3) { break @l } <v7>: * NEW: merge(if (2 > 3) { break @l }|!<v6>) -> <v7>
{ 1 if (2 > 3) { break @l } } <v7>: * COPY
while(true) { 1 if (2 > 3) { break @l } } !<v8>: *
@l while(true) { 1 if (2 > 3) { break @l } } !<v8>: * COPY
{ @l while(true) { 1 if (2 > 3) { break @l } } } !<v8>: * COPY
2 <v9>: * NEW: r(2) -> <v9>
{ 2 } <v9>: * COPY
try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 } <v10>: * NEW: merge(try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 }|!<v8>) -> <v10>
{ try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 } } <v10>: * COPY
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
true <v0>: Boolean NEW: r(true) -> <v0>
1 <v2>: * NEW: r(1) -> <v2>
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
3 <v4>: Int NEW: r(3) -> <v4>
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
break@l !<v6>: *
{ break@l } !<v6>: * COPY
if (2 > 3) { break@l } <v7>: * NEW: merge(if (2 > 3) { break@l }|!<v6>) -> <v7>
{ 1 if (2 > 3) { break@l } } <v7>: * COPY
while(true) { 1 if (2 > 3) { break@l } } !<v8>: *
l@ while(true) { 1 if (2 > 3) { break@l } } !<v8>: * COPY
{ l@ while(true) { 1 if (2 > 3) { break@l } } } !<v8>: * COPY
2 <v9>: * NEW: r(2) -> <v9>
{ 2 } <v9>: * COPY
try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 } <v10>: * NEW: merge(try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 }|!<v8>) -> <v10>
{ try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 } } <v10>: * COPY
=====================
== t8 ==
fun t8(a : Int) {
@l for (i in 1..a) {
l@ for (i in 1..a) {
try {
1
if (2 > 3) {
continue @l
continue@l
}
} finally {
2
@@ -232,34 +232,34 @@ fun t8(a : Int) {
}
}
---------------------
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
continue @l !<v10>: *
{ continue @l } !<v10>: * COPY
if (2 > 3) { continue @l } <v11>: * NEW: merge(if (2 > 3) { continue @l }|!<v10>) -> <v11>
{ 1 if (2 > 3) { continue @l } } <v11>: * COPY
2 <v9>: * NEW: r(2) -> <v9>
{ 2 } <v9>: * COPY
try { 1 if (2 > 3) { continue @l } } finally { 2 } <v12>: * NEW: merge(try { 1 if (2 > 3) { continue @l } } finally { 2 }|<v11>) -> <v12>
{ try { 1 if (2 > 3) { continue @l } } finally { 2 } } <v12>: * COPY
for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } !<v13>: *
@l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } !<v13>: * COPY
{ @l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } } !<v13>: * COPY
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
continue@l !<v10>: *
{ continue@l } !<v10>: * COPY
if (2 > 3) { continue@l } <v11>: * NEW: merge(if (2 > 3) { continue@l }|!<v10>) -> <v11>
{ 1 if (2 > 3) { continue@l } } <v11>: * COPY
2 <v9>: * NEW: r(2) -> <v9>
{ 2 } <v9>: * COPY
try { 1 if (2 > 3) { continue@l } } finally { 2 } <v12>: * NEW: merge(try { 1 if (2 > 3) { continue@l } } finally { 2 }|<v11>) -> <v12>
{ try { 1 if (2 > 3) { continue@l } } finally { 2 } } <v12>: * COPY
for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } } !<v13>: *
l@ for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } } !<v13>: * COPY
{ l@ for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } } } !<v13>: * COPY
=====================
== t9 ==
fun t9(a : Int) {
try {
@l for (i in 1..a) {
l@ for (i in 1..a) {
1
if (2 > 3) {
continue @l
continue@l
}
}
5
@@ -268,35 +268,35 @@ fun t9(a : Int) {
}
}
---------------------
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
continue @l !<v9>: *
{ continue @l } !<v9>: * COPY
if (2 > 3) { continue @l } <v10>: * NEW: merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>
{ 1 if (2 > 3) { continue @l } } <v10>: * COPY
for (i in 1..a) { 1 if (2 > 3) { continue @l } } !<v11>: *
@l for (i in 1..a) { 1 if (2 > 3) { continue @l } } !<v11>: * COPY
5 <v12>: * NEW: r(5) -> <v12>
{ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } <v12>: * COPY
2 <v13>: * NEW: r(2) -> <v13>
{ 2 } <v13>: * COPY
try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } <v14>: * NEW: merge(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 }|<v12>) -> <v14>
{ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } } <v14>: * COPY
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
continue@l !<v9>: *
{ continue@l } !<v9>: * COPY
if (2 > 3) { continue@l } <v10>: * NEW: merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>
{ 1 if (2 > 3) { continue@l } } <v10>: * COPY
for (i in 1..a) { 1 if (2 > 3) { continue@l } } !<v11>: *
l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } !<v11>: * COPY
5 <v12>: * NEW: r(5) -> <v12>
{ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } <v12>: * COPY
2 <v13>: * NEW: r(2) -> <v13>
{ 2 } <v13>: * COPY
try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 } <v14>: * NEW: merge(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 }|<v12>) -> <v14>
{ try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 } } <v14>: * COPY
=====================
== t10 ==
fun t10(a : Int) {
try {
@l for (i in 1..a) {
l@ for (i in 1..a) {
1
if (2 > 3) {
continue @l
continue@l
}
}
} finally {
@@ -304,26 +304,26 @@ fun t10(a : Int) {
}
}
---------------------
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
continue @l !<v9>: *
{ continue @l } !<v9>: * COPY
if (2 > 3) { continue @l } <v10>: * NEW: merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>
{ 1 if (2 > 3) { continue @l } } <v10>: * COPY
for (i in 1..a) { 1 if (2 > 3) { continue @l } } !<v11>: *
@l for (i in 1..a) { 1 if (2 > 3) { continue @l } } !<v11>: * COPY
{ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } !<v11>: * COPY
2 <v12>: * NEW: r(2) -> <v12>
{ 2 } <v12>: * COPY
try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 } <v13>: * NEW: merge(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 }|!<v11>) -> <v13>
{ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 } } <v13>: * COPY
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
continue@l !<v9>: *
{ continue@l } !<v9>: * COPY
if (2 > 3) { continue@l } <v10>: * NEW: merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>
{ 1 if (2 > 3) { continue@l } } <v10>: * COPY
for (i in 1..a) { 1 if (2 > 3) { continue@l } } !<v11>: *
l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } !<v11>: * COPY
{ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } !<v11>: * COPY
2 <v12>: * NEW: r(2) -> <v12>
{ 2 } <v12>: * COPY
try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } finally { 2 } <v13>: * NEW: merge(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } finally { 2 }|!<v11>) -> <v13>
{ try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } finally { 2 } } <v13>: * COPY
=====================
== t11 ==
fun t11() {
@@ -1,14 +1,14 @@
== foo ==
fun foo(): Int {
val t = @x (1 + 2)
val t = x@ (1 + 2)
return t
}
---------------------
L0:
1 <START>
2 mark({ val t = @x (1 + 2) return t })
v(val t = @x (1 + 2))
mark(@x (1 + 2))
2 mark({ val t = x@ (1 + 2) return t })
v(val t = x@ (1 + 2))
mark(x@ (1 + 2))
mark((1 + 2))
r(1) -> <v0>
r(2) -> <v1>
@@ -1,4 +1,4 @@
fun foo(): Int {
val t = @x (1 + 2)
val t = x@ (1 + 2)
return t
}
@@ -1,6 +1,6 @@
== foo ==
fun foo(): Int {
val t = @x (1 + 2)
val t = x@ (1 + 2)
return t
}
---------------------
@@ -8,8 +8,8 @@ fun foo(): Int {
2 <v1>: Int NEW: r(2) -> <v1>
1 + 2 <v2>: Int NEW: call(1 + 2, plus|<v0>, <v1>) -> <v2>
(1 + 2) <v2>: Int COPY
@x (1 + 2) <v2>: Int COPY
x@ (1 + 2) <v2>: Int COPY
t <v3>: Int NEW: r(t) -> <v3>
return t !<v4>: *
{ val t = @x (1 + 2) return t } !<v4>: * COPY
{ val t = x@ (1 + 2) return t } !<v4>: * COPY
=====================
@@ -1,5 +1,5 @@
fun box(): String {
var s1 = (@l1 "s")
val s2 = (@l2 if (@l3 true) s1 else null)
var s1 = (l1@ "s")
val s2 = (l2@ if (l3@ true) s1 else null)
return if (s2 == "s") "OK" else "fail"
}
@@ -1,13 +1,13 @@
fun box(): String {
val a = 1
val explicitlyReturned = run1 @f{
val explicitlyReturned = run1 f@{
if (a > 0)
return@f "OK"
else "Fail 1"
}
if (explicitlyReturned != "OK") return explicitlyReturned
val implicitlyReturned = run1 @f{
val implicitlyReturned = run1 f@{
if (a < 0)
return@f "Fail 2"
else "OK"
@@ -1,7 +1,7 @@
fun for_int_range(): Int {
var c = 0
@loop for (i in 1..10) {
if (c >= 5) continue @loop
loop@ for (i in 1..10) {
if (c >= 5) continue@loop
c++
}
return c
@@ -11,8 +11,8 @@ fun for_byte_range(): Int {
var c = 0
val from: Byte = 1
val to: Byte = 10
@loop for (i in from..to) {
if (c >= 5) continue @loop
loop@ for (i in from..to) {
if (c >= 5) continue@loop
c++
}
return c
@@ -22,8 +22,8 @@ fun for_long_range(): Int {
var c = 0
val from: Long = 1
val to: Long = 10
@loop for (i in from..to) {
if (c >= 5) continue @loop
loop@ for (i in from..to) {
if (c >= 5) continue@loop
c++
}
return c
@@ -34,8 +34,8 @@ fun for_int_list(): Int {
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
var c = 0
@loop for (i in a) {
if (c >= 5) continue @loop
loop@ for (i in a) {
if (c >= 5) continue@loop
c++
}
return c
@@ -46,8 +46,8 @@ fun for_byte_list(): Int {
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
var c = 0
@loop for (i in a) {
if (c >= 5) continue @loop
loop@ for (i in a) {
if (c >= 5) continue@loop
c++
}
return c
@@ -58,8 +58,8 @@ fun for_long_list(): Int {
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
var c = 0
@loop for (i in a) {
if (c >= 5) continue @loop
loop@ for (i in a) {
if (c >= 5) continue@loop
c++
}
return c
@@ -70,8 +70,8 @@ fun for_double_list(): Int {
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
var c = 0
@loop for (i in a) {
if (c >= 5) continue @loop
loop@ for (i in a) {
if (c >= 5) continue@loop
c++
}
return c
@@ -82,8 +82,8 @@ fun for_object_list(): Int {
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
var c = 0
@loop for (i in a) {
if (c >= 5) continue @loop
loop@ for (i in a) {
if (c >= 5) continue@loop
c++
}
return c
@@ -92,8 +92,8 @@ fun for_object_list(): Int {
fun for_str_array(): Int {
val a = arrayOfNulls<String>(10)
var c = 0
@loop for (i in a) {
if (c >= 5) continue @loop
loop@ for (i in a) {
if (c >= 5) continue@loop
c++
}
return c
@@ -102,8 +102,8 @@ fun for_str_array(): Int {
fun for_intarray(): Int {
val a = IntArray(10)
var c = 0
@loop for (i in a) {
if (c >= 5) continue @loop
loop@ for (i in a) {
if (c >= 5) continue@loop
c++
}
return c
@@ -22,10 +22,10 @@ fun box() : String {
if (1.a() != 2) return "test 8 failed"
val b = ( fun Int.() = this + 1)
if (1.b() != 2) return "test 9 failed"
val c = (@c fun Int.() = this + 1)
val c = (c@ fun Int.() = this + 1)
if (1.c() != 2) return "test 10 failed"
val d = @d fun (): Int { return@d 4}
val d = d@ fun (): Int { return@d 4}
if (d() != 4) return "test 11 failed"
return "OK"
@@ -22,7 +22,7 @@ fun box() : String {
if (1.a() != 2) return "test 8 failed"
val b = ( fun Int.name() = this + 1)
if (1.b() != 2) return "test 9 failed"
val c = (@c fun Int.name() = this + 1)
val c = (c@ fun Int.name() = this + 1)
if (1.c() != 2) return "test 10 failed"
val d = fun name(): Int { return@name 4}
@@ -3,8 +3,8 @@ fun simple() = fun (): Boolean { return true }
fun simpleNamed() = fun name(): Boolean { return true }
fun simpleNamed2() = fun name(): Boolean { return@name true }
fun withLabel() = @l fun (): Boolean { return@l true }
fun withLabelNamed() = @l fun name(): Boolean { return@l true }
fun withLabel() = l@ fun (): Boolean { return@l true }
fun withLabelNamed() = l@ fun name(): Boolean { return@l true }
fun box(): String {
if (!simple()()) return "Test simple failed"
@@ -1,7 +1,7 @@
fun box(): String {
var x = 1
(@foo x)++
++(@foo x)
(foo@ x)++
++(foo@ x)
(x: Int)++
++(x: Int)
@@ -2,9 +2,9 @@ data class A(val a: Int, val b: Int)
fun box() : String
{
@a val x = 1
@b fun a() = 2
@c val (z, z2) = A(1, 2)
a@ val x = 1
b@ fun a() = 2
c@ val (z, z2) = A(1, 2)
if (x != 1) return "fail 1"
@@ -1,7 +1,7 @@
import test.*
fun test1(b: Boolean): String {
val localResult = doCall ((@local {
val localResult = doCall ((local@ {
if (b) {
return@local "local"
} else {
@@ -1,7 +1,7 @@
import test.*
fun test1(b: Boolean): String {
val localResult = doCall @local {
val localResult = doCall local@ {
if (b) {
return@local "local"
} else {
@@ -1,7 +1,7 @@
import test.*
fun test1(b: Boolean): String {
val localResult = doCall @local {
val localResult = doCall local@ {
if (b) {
return@local "local"
} else {
@@ -15,9 +15,9 @@ class Global(val value: String)
fun test1(intKind: Kind, extKind: Kind): Global {
var externalResult = doCall @ext {
var externalResult = doCall ext@ {
val internalResult = doCall @int {
val internalResult = doCall int@ {
if (intKind == Kind.GLOBAL) {
return@test1 Global("internal -> global")
} else if (intKind == EXTERNAL) {
@@ -2,7 +2,7 @@
import test.*
fun test1(b: Boolean): String {
val localResult = noInlineCall @local {
val localResult = noInlineCall local@ {
if (b) {
return@local 1
} else {
@@ -4,12 +4,12 @@ fun test(): String = fun (): String {
return "fail"
} ()
fun test2(): String = (@l fun (): String {
fun test2(): String = (l@ fun (): String {
foo { return@l "OK" }
return "fail"
}) ()
fun test3(): String = (@l fun bar(): String {
fun test3(): String = (l@ fun bar(): String {
foo { return@bar "OK" }
return "fail"
}) ()
@@ -22,10 +22,10 @@ class Global(val value: String)
fun test1(intKind: Kind, extKind: Kind, holder: Holder): Global {
holder.value = ""
try {
var externalResult = doCall @ext {
var externalResult = doCall ext@ {
try {
val internalResult = doCall @int {
val internalResult = doCall int@ {
try {
if (intKind == Kind.GLOBAL) {
return@test1 Global("internal -> global")
@@ -22,10 +22,10 @@ class Global(val value: String)
fun test1(intKind: Kind, extKind: Kind, holder: Holder): Global {
holder.value = ""
try {
var externalResult = doCall (@ext {
var externalResult = doCall (ext@ {
try {
val internalResult = doCall (@int {
val internalResult = doCall (int@ {
try {
if (intKind == Kind.GLOBAL) {
return@test1 Global("internal -> global")
@@ -17,7 +17,7 @@ fun test1(h: Holder): String {
fun test2(h: Holder): String {
val localResult = doCall (@lambda {
val localResult = doCall (lambda@ {
h.value += "OK_LOCAL"
return@lambda "OK_LOCAL"
}, {
@@ -21,7 +21,7 @@ fun test1(h: Holder): String {
fun test2(h: Holder): String {
val localResult = doCall (
@lambda {
lambda@ {
h.value += "OK_NONLOCAL"
return@lambda "OK_NONLOCAL"
}, {
@@ -51,7 +51,7 @@ fun test4(h: Holder): String {
h.value += "OK_NONLOCAL"
return "OK_NONLOCAL"
},
@l2 {
l2@ {
h.value += ", OK_FINALLY"
return@l2 "OK_FINALLY"
})
@@ -1,5 +1,5 @@
fun findPairless(a : IntArray) : Int {
@loop for (i in a.indices) {
loop@ for (i in a.indices) {
for (j in a.indices) {
if (i != j && a[i] == a[j]) continue@loop
}
@@ -10,7 +10,7 @@ fun findPairless(a : IntArray) : Int {
fun hasDuplicates(a : IntArray) : Boolean {
var duplicate = false
@loop for (i in a.indices) {
loop@ for (i in a.indices) {
for (j in a.indices) {
if (i != j && a[i] == a[j]) {
duplicate = true
@@ -1,9 +1,9 @@
fun main(args: Array<String>) {
var i = 10
++i
++(@l i)
++(l@ i)
++(i: Int)
++(@l (i: Int))
++(l@ (i: Int))
}
// 4 IINC
@@ -1,6 +1,6 @@
fun main()
{
@l if (2 != 1) "fail 3"
l@ if (2 != 1) "fail 3"
}
// 0 GETSTATIC
@@ -1,8 +1,8 @@
class C {
fun f (<!UNUSED_PARAMETER!>a<!> : Boolean, <!UNUSED_PARAMETER!>b<!> : Boolean) {
@b while (true)
@a {
b@ while (true)
a@ {
<!NOT_A_LOOP_LABEL!>break@f<!>
break
<!UNREACHABLE_CODE!>break@b<!>
@@ -11,8 +11,8 @@ class C {
<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!>
@b while (true)
@a {
b@ while (true)
a@ {
<!NOT_A_LOOP_LABEL!>continue@f<!>
continue
<!UNREACHABLE_CODE!>continue@b<!>
@@ -42,21 +42,21 @@ class C {
}
fun containsBreakWithLabel(a: String?) {
@loop while(a == null) {
loop@ while(a == null) {
break@loop
}
a?.compareTo("2")
}
fun containsIllegalBreak(a: String?) {
@loop while(a == null) {
loop@ while(a == null) {
<!NOT_A_LOOP_LABEL!>break<!UNRESOLVED_REFERENCE!>@label<!><!>
}
<!DEBUG_INFO_SMARTCAST!>a<!>.compareTo("2")
}
fun containsBreakToOuterLoop(a: String?, b: String?) {
@loop while(b == null) {
loop@ while(b == null) {
while(a == null) {
break@loop
}
@@ -65,7 +65,7 @@ class C {
}
fun containsBreakInsideLoopWithLabel(a: String?, array: Array<Int>) {
@l while(a == null) {
l@ while(a == null) {
for (el in array) {
break@l
}
@@ -75,7 +75,7 @@ class C {
fun unresolvedBreak(a: String?, array: Array<Int>) {
while(a == null) {
@l for (el in array) {
l@ for (el in array) {
break
}
if (true) break else <!NOT_A_LOOP_LABEL!>break<!UNRESOLVED_REFERENCE!>@l<!><!>
@@ -46,7 +46,7 @@ fun breakContinueInWhenWithDoWhile(i: Int, j: Int) {
}
fun labeledBreakContinue(i: Int) {
@outer for (y in 0..10) {
outer@ for (y in 0..10) {
when (i) {
0 -> continue@outer
1 -> break@outer
@@ -56,7 +56,7 @@ fun main1() {
{1}();
(fun (x : Int) = x)(1)
1.(fun Int.(x : Int) = x)(1);
@l{1}()
l@{1}()
1.((fun Int.() = 1))()
1.(f())()
1.if(true){f()}else{f()}()
@@ -8,10 +8,10 @@ fun unitEmptyReturn() : Unit {return}
fun unitIntReturn() : Unit {return <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>}
fun unitUnitReturn() : Unit {return Unit}
fun test1() : Any = {<!RETURN_NOT_ALLOWED, RETURN_TYPE_MISMATCH!>return<!>}
fun test2() : Any = @a {return@a 1}
fun test2() : Any = a@ {return@a 1}
fun test3() : Any { <!RETURN_TYPE_MISMATCH!>return<!> }
fun test4(): ()-> Unit = { <!RETURN_NOT_ALLOWED, RETURN_TYPE_MISMATCH!>return@test4<!> }
fun test5(): Any = @l{ return@l }
fun test5(): Any = l@{ return@l }
fun test6(): Any = {<!RETURN_NOT_ALLOWED!>return 1<!>}
fun bbb() {
@@ -54,17 +54,17 @@ fun cannotBe() {
fun canBe(i0: Int, j: Int) {
var <!ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE!>i<!> = i0
(i: Int) = <!UNUSED_VALUE!>36<!>
(@label i) = <!UNUSED_VALUE!>34<!>
(label@ i) = <!UNUSED_VALUE!>34<!>
(<!VAL_REASSIGNMENT!>j<!>: Int) = <!UNUSED_VALUE!>36<!>
(@label j) = <!UNUSED_VALUE!>34<!> //repeat for j
(label@ j) = <!UNUSED_VALUE!>34<!> //repeat for j
val a = A()
(@l a.a) = 3894
(l@ a.a) = 3894
}
fun canBe2(j: Int) {
(@label <!VAL_REASSIGNMENT!>j<!>) = <!UNUSED_VALUE!>34<!>
(label@ <!VAL_REASSIGNMENT!>j<!>) = <!UNUSED_VALUE!>34<!>
}
class A() {
@@ -75,18 +75,18 @@ class Test() {
fun testIllegalValues() {
<!VARIABLE_EXPECTED!>1<!> += 23
(<!VARIABLE_EXPECTED!>1<!> : Int) += 43
(@l <!VARIABLE_EXPECTED!>1<!>) += 23
(l@ <!VARIABLE_EXPECTED!>1<!>) += 23
<!VARIABLE_EXPECTED!>getInt()<!> += 343
(@f <!VARIABLE_EXPECTED!>getInt()<!>) += 343
(f@ <!VARIABLE_EXPECTED!>getInt()<!>) += 343
(<!VARIABLE_EXPECTED!>getInt()<!> : Int) += 343
<!VARIABLE_EXPECTED!>1<!>++
(@r <!VARIABLE_EXPECTED!>1<!>)++
(r@ <!VARIABLE_EXPECTED!>1<!>)++
(<!VARIABLE_EXPECTED!>1<!> : Int)++
<!VARIABLE_EXPECTED!>getInt()<!>++
(@m <!VARIABLE_EXPECTED!>getInt()<!>)++
(m@ <!VARIABLE_EXPECTED!>getInt()<!>)++
(<!VARIABLE_EXPECTED!>getInt()<!> : Int)++
this<!UNRESOLVED_REFERENCE!>++<!>
@@ -94,7 +94,7 @@ class Test() {
var s : String = "r"
s += "ss"
s += this
s += (@a 2)
s += (a@ 2)
}
fun testVariables() {
@@ -102,13 +102,13 @@ class Test() {
val b: Int = 34
a += 34
(@l a) += 34
(l@ a) += 34
(a : Int) += 34
<!VAL_REASSIGNMENT!>b<!> += 34
a++
(@l a)++
(l@ a)++
(a : Int)++
<!UNUSED_CHANGED_VALUE!>(a)++<!>
}
@@ -116,7 +116,7 @@ class Test() {
fun testVariables1() {
val b: Int = 34
(@l <!VAL_REASSIGNMENT!>b<!>) += 34
(l@ <!VAL_REASSIGNMENT!>b<!>) += 34
//repeat for b
(b : Int) += 34
(b) += 3
@@ -130,7 +130,7 @@ class Test() {
ab.getArray()[54] = 23
ab.getArray()[54]++
(@f a)[3] = 4
(f@ a)[3] = 4
(a : Array<Int>)[4]++
(ab.getArray() : Array<Int>)[54] += 43
@@ -21,6 +21,6 @@ fun main(args : Array<String>) {
<!NO_COMPANION_OBJECT!>System<!> is Int
<!INVISIBLE_MEMBER!>System<!>()
(<!NO_COMPANION_OBJECT!>System<!>)
@foo <!NO_COMPANION_OBJECT!>System<!>
foo@ <!NO_COMPANION_OBJECT!>System<!>
null in <!NO_COMPANION_OBJECT!>System<!>
}
@@ -1,13 +1,13 @@
fun test() {
@l for (i in if (true) 1..10 else <!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue@l<!>) {}
l@ for (i in if (true) 1..10 else <!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue@l<!>) {}
for (i in if (true) 1..10 else <!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!>) {}
while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>break<!>) {}
@l while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>break@l<!>) {}
l@ while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>break@l<!>) {}
do {} while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!>)
@l do {} while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue@l<!>)
l@ do {} while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue@l<!>)
//KT-5704
var i = 0
@@ -12,7 +12,7 @@ fun test2() {
<!UNREACHABLE_CODE!>bar(<!>11, todo()/*comment1*/, <!UNREACHABLE_CODE!>""/*comment2*/)<!>
}
fun test3() {
<!UNREACHABLE_CODE!>bar(<!>11, @l(todo()/*comment*/), <!UNREACHABLE_CODE!>"")<!>
<!UNREACHABLE_CODE!>bar(<!>11, l@(todo()/*comment*/), <!UNREACHABLE_CODE!>"")<!>
}
fun todo() = throw Exception()
@@ -1,7 +1,7 @@
//KT-5200 Mark unreachable code in lambdas
fun test1(): String {
doCall @local {
doCall local@ {
throw NullPointerException()
<!UNREACHABLE_CODE!>"b3"<!> //unmarked
}
@@ -10,7 +10,7 @@ fun test1(): String {
}
fun test2(nonLocal: String, b: Boolean): String {
doCall @local {
doCall local@ {
if (b) {
return@local "b1"
} else {
@@ -5,7 +5,7 @@ class TestFunctionLiteral {
val sum: (Int) -> Int = { x: Int ->
sum(x - 1) + x
}
val foo: () -> Unit = @l ({ foo() })
val foo: () -> Unit = l@ ({ foo() })
}
open class A(val a: A)
@@ -19,7 +19,7 @@ class TestObjectLiteral {
val y = obj
}
}
val obj1: A = @l ( object: A(<!UNINITIALIZED_VARIABLE!>obj1<!>) {
val obj1: A = l@ ( object: A(<!UNINITIALIZED_VARIABLE!>obj1<!>) {
init {
val x = <!UNINITIALIZED_VARIABLE!>obj1<!>
}
@@ -1,7 +1,7 @@
fun call(f: () -> Unit) = f()
fun f1() {
@outer while (true) {
outer@ while (true) {
call {
<!BREAK_OR_CONTINUE_JUMPS_ACROSS_FUNCTION_BOUNDARY!>break@outer<!>
}
@@ -1,7 +1,7 @@
fun whileLoop(x: Int?) {
@outer while (x != 0) {
outer@ while (x != 0) {
while (x != 1) {
if (x == 2) continue @outer
if (x == 2) continue@outer
}
<!TYPE_MISMATCH!>x<!> : Int
}
@@ -9,9 +9,9 @@ fun whileLoop(x: Int?) {
}
fun doWhileLoop(x: Int?) {
@outer while (x != 0) {
outer@ while (x != 0) {
do {
if (x == 2) continue @outer
if (x == 2) continue@outer
} while (x == null)
<!TYPE_MISMATCH!>x<!> : Int
}
@@ -19,10 +19,10 @@ fun doWhileLoop(x: Int?) {
}
fun whileLoopContinueInnerOuter(x: Int?) {
@outer while (x != 0) {
@inner while (x != 1) {
outer@ while (x != 0) {
inner@ while (x != 1) {
while (x != 2) {
if (x == 3) continue @inner
if (x == 3) continue@inner
}
<!TYPE_MISMATCH!>x<!> : Int
}
@@ -1,5 +1,5 @@
class A3 {
val a: String by @l MyProperty()
val a: String by l@ MyProperty()
class MyProperty<T> {}
@@ -1,3 +1,3 @@
fun test() {
(@d <!DECLARATION_IN_ILLEGAL_CONTEXT!>val bar = 2<!>)
(d@ <!DECLARATION_IN_ILLEGAL_CONTEXT!>val bar = 2<!>)
}
@@ -2,19 +2,19 @@ package m
fun test(i: Int?) {
if (i != null) {
foo(@l1 <!DEBUG_INFO_SMARTCAST!>i<!>)
foo(l1@ <!DEBUG_INFO_SMARTCAST!>i<!>)
foo((<!DEBUG_INFO_SMARTCAST!>i<!>))
foo(@l2 (<!DEBUG_INFO_SMARTCAST!>i<!>))
foo((@l3 <!DEBUG_INFO_SMARTCAST!>i<!>))
foo(l2@ (<!DEBUG_INFO_SMARTCAST!>i<!>))
foo((l3@ <!DEBUG_INFO_SMARTCAST!>i<!>))
}
val a: Int = @l4 <!TYPE_MISMATCH!>""<!>
val a: Int = l4@ <!TYPE_MISMATCH!>""<!>
val b: Int = (<!TYPE_MISMATCH!>""<!>)
val c: Int = <!TYPE_MISMATCH!>""<!>: Int
val d: Int = <!TYPE_MISMATCH!><!TYPE_MISMATCH!>""<!>: Long<!>
foo(@l4 <!TYPE_MISMATCH!>""<!>)
foo(l4@ <!TYPE_MISMATCH!>""<!>)
foo((<!TYPE_MISMATCH!>""<!>))
foo(<!TYPE_MISMATCH!>""<!>: Int)
foo(<!TYPE_MISMATCH!><!TYPE_MISMATCH!>""<!>: Long<!>)
@@ -13,7 +13,7 @@ fun test() {
}
fun foo() {
val bal = @bag fun () {
val bal = bag@ fun () {
val bar = fun() {
<!RETURN_NOT_ALLOWED!>return@bag<!>
}
@@ -1,10 +1,10 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
val label_fun = @label fun () {
val label_fun = label@ fun () {
return@label
}
val parenthesized_label_fun = (@label fun () {
val parenthesized_label_fun = (label@ fun () {
return@label
})
@@ -9,7 +9,7 @@ fun foo<T>(<!UNUSED_PARAMETER!>a<!>: A, f: () -> T): T = f()
fun foo<T>(<!UNUSED_PARAMETER!>b<!>: B, f: () -> T): T = f()
fun test(c: C) {
<!CANNOT_COMPLETE_RESOLVE!>foo<!>(c) @f {
<!CANNOT_COMPLETE_RESOLVE!>foo<!>(c) f@ {
c<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
}
}
@@ -1,5 +1,5 @@
val flag = true
val a/*: () -> Comparable<out Any?>*/ = @l {
val a/*: () -> Comparable<out Any?>*/ = l@ {
return@l if (flag) "OK" else 4
}
@@ -1,15 +1,15 @@
val flag = true
// type of a was checked by txt
val a/*: () -> Any*/ = @l { // commonSupertype(Int, Unit) = Any
val a/*: () -> Any*/ = l@ { // commonSupertype(Int, Unit) = Any
if (flag) return@l 4
}
val b/*: () -> Int */ = @l {
val b/*: () -> Int */ = l@ {
if (flag) return@l 4
5
}
val c/*: () -> Unit */ = @l {
val c/*: () -> Unit */ = l@ {
if (flag) <!UNUSED_EXPRESSION!>4<!>
}
@@ -1,22 +1,22 @@
val flag = true
val a: () -> Int = @l {
val a: () -> Int = l@ {
<!TYPE_MISMATCH!>if (flag) return@l 4<!>
}
val b: () -> Unit = @l {
val b: () -> Unit = l@ {
if (flag) return@l <!CONSTANT_EXPECTED_TYPE_MISMATCH!>4<!>
}
val c: () -> Any = @l {
val c: () -> Any = l@ {
if (flag) return@l 4
}
val d: () -> Int = @l {
val d: () -> Int = l@ {
if (flag) return@l 4
5
}
val e: () -> Int = @l {
val e: () -> Int = l@ {
<!TYPE_MISMATCH!>if (flag) <!UNUSED_EXPRESSION!>4<!><!>
}
@@ -1,6 +1,6 @@
val flag = true
val a /*: (Int) -> String */ = @l {
val a /*: (Int) -> String */ = l@ {
i: Int ->
if (i == 0) return@l i.toString()
@@ -1,5 +1,5 @@
fun test2(a: Int) {
val x = run @f{
val x = run f@{
if (a > 0) <!RETURN_NOT_ALLOWED!>return<!>
return@f 1
}
@@ -1,5 +1,5 @@
fun test2() {
val x = run @f{return@f 1}
val x = run f@{return@f 1}
x: Int
}
@@ -1,11 +1,11 @@
fun test() {
val x = run(@f{return@f 1})
val x = run(f@{return@f 1})
x: Int
}
fun test1() {
val x = run(@l{return@l 1})
val x = run(l@{return@l 1})
x: Int
}
@@ -1,5 +1,5 @@
fun test() {
run1 @f{
run1 f@{
(return@f 1)<!UNREACHABLE_CODE!>: Nothing<!>
}
}
@@ -1,5 +1,5 @@
fun test() {
val x = run @f{
val x = run f@{
fun local(a: Int): String {
if (a > 0) return "2"
return@local "3"
@@ -1,6 +1,6 @@
fun test() {
val x = run @f{
run @ff {
val x = run f@{
run ff@ {
return@ff "2"
}
return@f 1
@@ -1,5 +1,5 @@
fun test(a: Int) {
run @f{
run f@{
if (a > 0) return@f
else return@f <!RETURN_TYPE_MISMATCH!>1<!>
}
@@ -1,13 +1,13 @@
class A
val flag = true
val a /*: () -> A?*/ = @l {
val a /*: () -> A?*/ = l@ {
if (flag) return@l null
A()
}
val b /*: () -> A?*/ = @l {
val b /*: () -> A?*/ = l@ {
if (flag) return@l null
return@l A()
@@ -1,6 +1,6 @@
val flag = true
val a = @b {
val a = b@ {
if (flag) return@b <!RETURN_TYPE_MISMATCH!>4<!>
return@b
}
@@ -1,5 +1,5 @@
fun test(a: Int) {
val x = run @f{
val x = run f@{
if (a > 0) return@f
else return@f Unit
}
@@ -1,7 +1,7 @@
val flag = true
// type of lambda was checked by txt
val a = @b { // () -> Unit
val a = b@ { // () -> Unit
if (flag) return@b
else <!UNUSED_EXPRESSION!>54<!>
}
@@ -3,7 +3,7 @@ fun listOf<T>(vararg <!UNUSED_PARAMETER!>values<!>: T): List<T> = null!!
val flag = true
val a: () -> List<Int> = @l {
val a: () -> List<Int> = l@ {
if (flag) return@l listOf()
listOf(5)
}
@@ -1,16 +1,16 @@
val flag = true
// type of lambda was checked by txt
val a = @l { // () -> Any
val a = l@ { // () -> Any
if (flag) return@l 4
return@l Unit
}
val b = @l { // () -> Any
val b = l@ { // () -> Any
if (flag) return@l Unit
5
}
val c = @l { // () -> Unit
val c = l@ { // () -> Unit
if (flag) return@l Unit
}
@@ -1,5 +1,5 @@
fun test(a: Int) {
run @f{ <!DEPRECATED_LAMBDA_SYNTAX!>(): Int<!> ->
run f@{ <!DEPRECATED_LAMBDA_SYNTAX!>(): Int<!> ->
if (a > 0) return@f <!TYPE_MISMATCH!>""<!>
return@f 1
}
@@ -4,7 +4,7 @@ trait C: A
fun test(a: C, b: B) {
val x = run @f{
val x = run f@{
if (a != b) return@f a
b
}
@@ -1,6 +1,6 @@
// KT-6822 Smart cast doesn't work inside local returned expression in lambda
val a /* :(Int?) -> Int? */ = @l { it: Int? -> // but must be (Int?) -> Int
val a /* :(Int?) -> Int? */ = l@ { it: Int? -> // but must be (Int?) -> Int
if (it != null) return@l it
5
}
@@ -1,6 +1,6 @@
// KT-6822 Smart cast doesn't work inside local returned expression in lambda
val a : (Int?) -> Int = @l {
val a : (Int?) -> Int = l@ {
if (it != null) return@l <!DEBUG_INFO_SMARTCAST!>it<!>
5
}
@@ -1,8 +1,8 @@
val a = @l {
val a = l@ {
return@l <!UNRESOLVED_REFERENCE!>r<!>
}
val b = @l {
val b = l@ {
if ("" == "OK") return@l
return@l <!UNRESOLVED_REFERENCE, RETURN_TYPE_MISMATCH!>r<!>
@@ -4,7 +4,7 @@ trait Element
fun test(handlers: Map<String, Element.()->Unit>) {
handlers.getOrElse("name", @l { return@l <!NULL_FOR_NONNULL_TYPE!>null<!> })
handlers.getOrElse("name", l@ { return@l <!NULL_FOR_NONNULL_TYPE!>null<!> })
}
fun <K,V> Map<K,V>.getOrElse(key: K, defaultValue: ()-> V) : V = throw Exception("$key $defaultValue")
@@ -6,7 +6,7 @@ import java.util.*
fun expected<T>(t: T, <!UNUSED_PARAMETER!>f<!>: () -> T) : T = t
fun test(arrayList: ArrayList<Int>, list: List<Int>) {
val <!UNUSED_VARIABLE!>t<!> = expected(arrayList, @l {return@l list.reverse() })
val <!UNUSED_VARIABLE!>t<!> = expected(arrayList, l@ {return@l list.reverse() })
}
fun <T> List<T>.reverse() : List<T> = this
@@ -1,7 +1,7 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE
inline fun foo(bar1: (String.() -> Int) -> Int, bar2: (()->Int) -> Int) {
bar1 @label {
bar1 label@ {
this@label.length()
}
@@ -13,7 +13,7 @@ inline fun foo(bar1: (String.() -> Int) -> Int, bar2: (()->Int) -> Int) {
// this@bar1.length
//}
bar2 @l {
bar2 l@ {
11
}
@@ -24,17 +24,17 @@ inline fun foo(bar1: (String.() -> Int) -> Int, bar2: (()->Int) -> Int) {
}
inline fun foo2(bar1: (String.() -> Int) -> Int) {
@l1 <!USAGE_IS_NOT_INLINABLE!>bar1<!>
l1@ <!USAGE_IS_NOT_INLINABLE!>bar1<!>
@l2 bar1 {
l2@ bar1 {
11
}
(@l3 bar1) {
(l3@ bar1) {
11
}
(@l5 (@l4 bar1)) {
(l5@ (l4@ bar1)) {
11
}
}
@@ -1,5 +1,5 @@
fun inlineCallExplicitError(): String {
inlineFun @lamba {
inlineFun lamba@ {
if (true) {
return@lamba 2
}
@@ -10,7 +10,7 @@ fun inlineCallExplicitError(): String {
}
fun inlineCall(): String {
inlineFun @lamba {
inlineFun lamba@ {
if (true) {
return@lamba 2
}
@@ -26,7 +26,7 @@ inline fun inlineFun(s: () -> Int) {
fun noInlineCall(): String {
noInline @lambda {
noInline lambda@ {
if (true) {
return@lambda 2
}
@@ -15,9 +15,9 @@ class Global(val value: String)
fun test1(intKind: Kind, extKind: Kind): Global {
var externalResult = doCall @ext {
var externalResult = doCall ext@ {
val internalResult = doCall @int {
val internalResult = doCall int@ {
if (intKind == Kind.LOCAL) {
return@test1 Global("internal to global")
} else if (intKind == EXT_RETURN) {
@@ -27,13 +27,13 @@ fun <R> fun3ValueArgument(p: () -> R) {
fun <R> fun4(p: () -> R) {
inlineFun @lambda {
inlineFun lambda@ {
return@lambda p();
}
}
fun <R> fun4ValueArgument(p: () -> R) {
inlineFun (@lambda {
inlineFun (lambda@ {
return@lambda p();
})
}
@@ -20,7 +20,7 @@ fun <R> fun3(p: () -> R) {
}
fun <R> fun4(p: () -> R) {
Z() inlineFun @lambda {
Z() inlineFun lambda@ {
return@lambda p();
}
}
@@ -20,6 +20,6 @@ inline fun inlineFunWithInvoke2(s: (p: Int) -> Unit) {
}
inline fun propagation(s: (p: Int) -> Unit) {
inlineFunWithInvoke((@label (s: (p: Int) -> Unit)))
inlineFunWithInvoke((@label2 @label (s: (p: Int) -> Unit)))
inlineFunWithInvoke((label@ (s: (p: Int) -> Unit)))
inlineFunWithInvoke((label2@ label@ (s: (p: Int) -> Unit)))
}
@@ -5,8 +5,8 @@ public inline fun <reified T> Array(n: Int, block: (Int) -> T): Array<T> = null!
fun test() {
val ints = Array<Int?>(2, { null })
ints.forEach @lit {
if (it == null) return @lit
ints.forEach lit@ {
if (it == null) return@lit
use(<!DEBUG_INFO_SMARTCAST!>it<!> + 5)
}
}
@@ -1,5 +1,5 @@
fun nonlocals(b : Boolean) {
@a<!UNUSED_FUNCTION_LITERAL!>{
a@<!UNUSED_FUNCTION_LITERAL!>{
fun foo() {
if (b) {
<!RETURN_NOT_ALLOWED!>return@a 1<!> // The label must be resolved, but an error should be reported for a non-local return
@@ -2,7 +2,7 @@
//KT-3920 Labeling information is lost when passing through some expressions
fun test() {
run @f{
run f@{
val x = if (1 > 2) return@f 1 else 2
2
}
@@ -7,7 +7,7 @@ fun string(init: StringBuilder.() -> Unit): String{
return answer.toString()
}
val str = string @l{
val str = string l@{
append("hello, ")
val sub = string {
@@ -2,7 +2,7 @@
//KT-4603 Labeling information is lost when passing through local classes or objects
fun foo() {
val s: Int.() -> Unit = @l{
val s: Int.() -> Unit = l@{
class Local(val y: Int = this@l) {
fun bar() {
val x: Int = this@l //unresolved
@@ -1,10 +1,10 @@
//KT-591 Unresolved label in valid code
fun test() {
val <!UNUSED_VARIABLE!>a<!>: (Int?).() -> Unit = @a{
val <!UNUSED_VARIABLE!>a<!>: (Int?).() -> Unit = a@{
if (this != null) {
val <!UNUSED_VARIABLE!>b<!>: String.() -> Unit = {
<!DEBUG_INFO_SMARTCAST!>this@a<!>.times(5) // @a Unresolved
<!DEBUG_INFO_SMARTCAST!>this@a<!>.times(5) // a@ Unresolved
}
}
}
@@ -15,7 +15,7 @@ fun B.b() {
}
fun test() {
@b <!UNUSED_FUNCTION_LITERAL!>{ <!DEPRECATED_LAMBDA_SYNTAX!>B.()<!> ->
b@ <!UNUSED_FUNCTION_LITERAL!>{ <!DEPRECATED_LAMBDA_SYNTAX!>B.()<!> ->
object : A {
override fun foo() {
this@b.bar()
@@ -8,8 +8,8 @@ fun main(args : Array<String>) {
val <!UNUSED_VARIABLE!>h<!> : String = <!TYPE_MISMATCH!>v--<!>;
val <!UNUSED_VARIABLE!>h1<!> : String = <!TYPE_MISMATCH!>--v<!>;
val <!UNUSED_VARIABLE!>i<!> : String = <!TYPE_MISMATCH!>!true<!>;
val <!UNUSED_VARIABLE!>j<!> : String = @foo <!CONSTANT_EXPECTED_TYPE_MISMATCH!>true<!>;
val <!UNUSED_VARIABLE!>k<!> : String = @foo @bar <!CONSTANT_EXPECTED_TYPE_MISMATCH!>true<!>;
val <!UNUSED_VARIABLE!>j<!> : String = foo@ <!CONSTANT_EXPECTED_TYPE_MISMATCH!>true<!>;
val <!UNUSED_VARIABLE!>k<!> : String = foo@ bar@ <!CONSTANT_EXPECTED_TYPE_MISMATCH!>true<!>;
val <!UNUSED_VARIABLE!>l<!> : String = <!TYPE_MISMATCH!>-1<!>;
val <!UNUSED_VARIABLE!>m<!> : String = <!TYPE_MISMATCH!>+1<!>;
}
@@ -4,7 +4,7 @@ package kt411
fun f() {
invoker(
@l{
l@{
return@l 11 // expects Function, but should expect Int
}
)
@@ -13,13 +13,13 @@ fun invoker(<!UNUSED_PARAMETER!>gen<!> : () -> Int) : Int = 0
//more tests
fun t1() {
val <!UNUSED_VARIABLE!>v<!> = @l{
val <!UNUSED_VARIABLE!>v<!> = l@{
return@l 111
}
}
fun t2() : String {
val <!UNUSED_VARIABLE!>g<!> : ()-> Int = @l{
val <!UNUSED_VARIABLE!>g<!> : ()-> Int = l@{
if (true) {
return@l 1
}
@@ -30,7 +30,7 @@ fun t2() : String {
fun t3() : String {
invoker(
@l{
l@{
if (true) {
<!RETURN_NOT_ALLOWED!>return@t3 "1"<!>
}
@@ -41,7 +41,7 @@ fun t3() : String {
}
)
invoker(
@l{
l@{
return@l 1
}
)
@@ -54,10 +54,10 @@ fun t3() : String {
}
fun t4() : Int {
val <!UNUSED_VARIABLE!>h<!> : ()-> String = @l{
val <!UNUSED_VARIABLE!>h<!> : ()-> String = l@{
return@l "a"
}
val <!UNUSED_VARIABLE!>g<!> : ()-> String = @l{
val <!UNUSED_VARIABLE!>g<!> : ()-> String = l@{
return@l "a"
}
@@ -3,5 +3,5 @@
inline fun run1<T>(body : () -> T) : T = body()
fun main1(<!UNUSED_PARAMETER!>args<!> : Array<String>) {
run1 @l{ 1 } // should not be an error
run1 l@{ 1 } // should not be an error
}
@@ -1,7 +1,7 @@
package c
fun test() {
with (1) @l {
with (1) l@ {
foo(1, <!NAMED_PARAMETER_NOT_FOUND!>zz<!> = { this@l } )
}
}
@@ -14,7 +14,7 @@ fun test(bar: Bar, a: A) {
// no elements with error types
fooInt((bar()))
fooInt(if (true) bar() else bar())
fooInt(@label bar())
fooInt(label@ bar())
fooInt(a.bar())
fooInt(((@label if (true) (a.bar()) else bar())))
fooInt(((label@ if (true) (a.bar()) else bar())))
}
@@ -3,7 +3,7 @@ fun testEquals(x: Int) {
if (<!SENSELESS_COMPARISON!>x == (null)<!>) {}
if (<!SENSELESS_COMPARISON!>x == null: Nothing?<!>) {}
if (<!SENSELESS_COMPARISON!>x == null: Nothing?<!>) {}
if (<!SENSELESS_COMPARISON!>x == @foo null<!>) {}
if (<!SENSELESS_COMPARISON!>x == foo@ null<!>) {}
}
fun testEqualsFlipped(x: Int) {
@@ -11,7 +11,7 @@ fun testEqualsFlipped(x: Int) {
if (<!SENSELESS_COMPARISON!>(null) == x<!>) {}
if (<!SENSELESS_COMPARISON!>null: Nothing? == x<!>) {}
if (<!SENSELESS_COMPARISON!>null: Nothing? == x<!>) {}
if (<!SENSELESS_COMPARISON!>@foo null == x<!>) {}
if (<!SENSELESS_COMPARISON!>foo@ null == x<!>) {}
}
fun testNotEquals(x: Int) {
@@ -19,7 +19,7 @@ fun testNotEquals(x: Int) {
if (<!SENSELESS_COMPARISON!>x != (null)<!>) {}
if (<!SENSELESS_COMPARISON!>x != null: Nothing?<!>) {}
if (<!SENSELESS_COMPARISON!>x != null: Nothing?<!>) {}
if (<!SENSELESS_COMPARISON!>x != @foo null<!>) {}
if (<!SENSELESS_COMPARISON!>x != foo@ null<!>) {}
}
fun testNotEqualsFlipped(x: Int) {
@@ -27,5 +27,5 @@ fun testNotEqualsFlipped(x: Int) {
if (<!SENSELESS_COMPARISON!>(null) != x<!>) {}
if (<!SENSELESS_COMPARISON!>null: Nothing? != x<!>) {}
if (<!SENSELESS_COMPARISON!>null: Nothing? != x<!>) {}
if (<!SENSELESS_COMPARISON!>@foo null != x<!>) {}
if (<!SENSELESS_COMPARISON!>foo@ null != x<!>) {}
}
@@ -1,6 +1,6 @@
public fun foo(x: String?): Int {
var y: Any
@loop while (true) {
loop@ while (true) {
y = when (x) {
null -> break@loop
"abc" -> return 0
@@ -1,7 +1,7 @@
fun x(): Boolean { return true }
public fun foo(p: String?, r: String?): Int {
@outer do {
outer@ do {
do {
p!!.length()
if (!x()) continue@outer
@@ -3,7 +3,7 @@ fun x(p: String): Boolean { return p == "abc" }
public fun foo(p: String?, r: String?, q: String?): Int {
while(true) {
q!!.length()
@loop do {
loop@ do {
while(true) {
p!!.length()
if (x(<!DEBUG_INFO_SMARTCAST!>p<!>)) break@loop
@@ -1,7 +1,7 @@
fun x(): Boolean { return true }
public fun foo(p: String?, r: String?, q: String?): Int {
@outer while(true) {
outer@ while(true) {
q!!.length()
do {
if (x()) continue@outer
@@ -3,7 +3,7 @@ fun bar(): Boolean { return true }
public fun foo(x: String?): Int {
var y: Int?
y = 0
@loop do {
loop@ do {
<!DEBUG_INFO_SMARTCAST!>y<!> += when (x) {
null -> break@loop
"abc" -> return 0
@@ -1,5 +1,5 @@
public fun foo(x: String?): Int {
@loop while (true) {
loop@ while (true) {
when (x) {
null -> break@loop
"abc" -> return 0
@@ -1,5 +1,5 @@
public fun foo(x: String?): Int {
@loop while (true) {
loop@ while (true) {
when (x) {
null -> return -1
"abc" -> return 0
@@ -8,9 +8,9 @@ class A(val a:Int) {
this@B : B
this@A : A
}
val <!UNUSED_VARIABLE!>b<!>: Double.() -> Unit = @a{ this@a : Double + this@xx : Char}
val <!UNUSED_VARIABLE!>c<!> = @a{ -> <!NO_THIS!>this@a<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> this@xx : Char}
return (@a{this@a : Double + this@xx : Char})
val <!UNUSED_VARIABLE!>b<!>: Double.() -> Unit = a@{ this@a : Double + this@xx : Char}
val <!UNUSED_VARIABLE!>c<!> = a@{ -> <!NO_THIS!>this@a<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> this@xx : Char}
return (a@{this@a : Double + this@xx : Char})
}
}
}
@@ -23,11 +23,11 @@ fun test(d: dynamic) {
d.foo({ x -> } : (Int) -> Unit)
d.foo(@label { x -> })
d.foo(label@ { x -> })
d.foo(@label ({ x, y -> }))
d.foo(label@ ({ x, y -> }))
d.foo((@label ({ <!DEPRECATED_LAMBDA_SYNTAX!>(x, y: Int)<!> -> })))
d.foo((label@ ({ <!DEPRECATED_LAMBDA_SYNTAX!>(x, y: Int)<!> -> })))
d.foo(({ x -> }))
@@ -2,6 +2,6 @@ package test
annotation class Ann(i: Double)
Ann(@A 1.0) class MyClass
Ann(A@ 1.0) class MyClass
// EXPECTED: Ann(i = 1.0.toDouble(): Double)
@@ -31,7 +31,7 @@ val commonCases: CaseBuilder.(String, String) -> Unit = { testByName, testByRef
$testRenamedByName
}""", "foo(\"123\")")
case("label", "val t: Int", " = 0", "testRenamed(\"$KEYWORD_MARKER\", { @$KEYWORD_MARKER while (false) {} })")
case("label", "val t: Int", " = 0", "testRenamed(\"$KEYWORD_MARKER\", { $KEYWORD_MARKER@ while (false) {} })")
}
val commonCasesWithTestNotRenamed: CaseBuilder.() -> Unit = { commonCases(testNotRenamedByName, testNotRenamedByRef) }
@@ -1,9 +1,9 @@
fun foo() {
@myFor
myFor@
for (i in 1..10) {
@myWhile
myWhile@
while (x()) {
@myDo
myDo@
do {
<caret>
} while (y())

Some files were not shown because too many files have changed in this diff Show More