[FIR] Fix missing RETURN_TYPE_MISMATCH for labeled return statements

in lambda functions, ^KT-59907 Fixed

(cherry picked from commit 8e72f60996)
This commit is contained in:
Ivan Kochurkin
2023-09-19 13:58:31 +02:00
committed by Space Team
parent e5530147f0
commit 4b9e15dfa8
9 changed files with 37 additions and 21 deletions
@@ -1,6 +1,6 @@
fun test(a: Int) {
run f@{
if (a > 0) return@f
if (a > 0) <!RETURN_TYPE_MISMATCH!>return@f<!>
else return@f 1
}
}
@@ -1,6 +0,0 @@
val flag = true
val a = b@ {
if (flag) return@b 4
return@b
}
@@ -1,6 +1,7 @@
// FIR_IDENTICAL
val flag = true
val a = b@ {
if (flag) return@b <!RETURN_TYPE_MISMATCH!>4<!>
return@b
}
}
@@ -14,7 +14,7 @@ val b = run {
// Unit
val c = run {
if (flag) return@run
if (flag) <!RETURN_TYPE_MISMATCH!>return@run<!>
return@run 4
}
}
@@ -1,6 +1,6 @@
fun test(a: Int) {
run<Int>f@{
if (a > 0) return@f <!ARGUMENT_TYPE_MISMATCH!>""<!>
if (a > 0) return@f <!ARGUMENT_TYPE_MISMATCH, RETURN_TYPE_MISMATCH!>""<!>
return@f 1
}
@@ -20,7 +20,7 @@ fun test(a: A<out CharSequence>, z: Out<CharSequence>) {
a.bar { <!ARGUMENT_TYPE_MISMATCH, TYPE_MISMATCH!>z.id()<!> }
a.foo {
z.foobar(if (1 > 2) return@foo <!ARGUMENT_TYPE_MISMATCH!>""<!> else "")
z.foobar(if (1 > 2) return@foo <!ARGUMENT_TYPE_MISMATCH, RETURN_TYPE_MISMATCH!>""<!> else "")
<!ARGUMENT_TYPE_MISMATCH!>""<!>
}
}
@@ -32,9 +32,9 @@ fun foo() {
// Doesn't work both in K1 and K2, but probably should (KT-58232 for tracking)
val dates3 = <!NEW_INFERENCE_ERROR!>myRun {
when {
else -> return@myRun buildList {
else -> return@myRun <!RETURN_TYPE_MISMATCH!>buildList {
add(4)
}
}<!>
}
}<!>
}