[FIR] Fix incorrect inference of return type of anonymous functions
Also remove incorrect subtype check checkers Test unsafeVarianceInAliasedFunctionalType.kt started to fail because of KT-54894. This bug existed before, changes from this commit just unhided it (previously it was hidden because incorrect subtype check in `isSubtypeForTypeMismatch` which is used by FirFunctionReturnTypeMismatchChecker
This commit is contained in:
committed by
Space Team
parent
1b42298025
commit
991d8c18aa
@@ -10,7 +10,7 @@ fun unitUnitReturn() : Unit {return Unit}
|
||||
fun test1() : Any = {<!RETURN_NOT_ALLOWED!>return<!>}
|
||||
fun test2() : Any = a@ {return@a 1}
|
||||
fun test3() : Any { return }
|
||||
fun test4(): ()-> Unit = { <!RETURN_NOT_ALLOWED!>return@test4<!> }
|
||||
fun test4(): ()-> Unit = { <!RETURN_NOT_ALLOWED, RETURN_TYPE_MISMATCH!>return@test4<!> }
|
||||
fun test5(): Any = l@{ return@l }
|
||||
fun test6(): Any = {<!RETURN_NOT_ALLOWED!>return<!> 1}
|
||||
|
||||
|
||||
+3
-3
@@ -11,8 +11,8 @@ fun main() {
|
||||
|
||||
val a0: () -> Int = <!INITIALIZER_TYPE_MISMATCH!>fun(): String = "1"<!>
|
||||
val a1: () -> Int = <!INITIALIZER_TYPE_MISMATCH!>(fun() = "1")<!>
|
||||
val a2: () -> Unit = (fun() = <!RETURN_TYPE_MISMATCH!>"1"<!>)
|
||||
val a3: Unit = <!INITIALIZER_TYPE_MISMATCH!>(fun() = <!RETURN_TYPE_MISMATCH!>"1"<!>)<!>
|
||||
val a2: () -> Unit = <!INITIALIZER_TYPE_MISMATCH!>(fun() = "1")<!>
|
||||
val a3: Unit = <!INITIALIZER_TYPE_MISMATCH!>(fun() = "1")<!>
|
||||
val a4 = (fun() = "1")
|
||||
val a5 = (fun(): String = "1")
|
||||
val a6: () -> Int = (fun() = 1)
|
||||
@@ -36,5 +36,5 @@ fun main() {
|
||||
val a18: () -> Int = <!INITIALIZER_TYPE_MISMATCH!>fun() {}<!>
|
||||
val a19: () -> () -> Int = <!INITIALIZER_TYPE_MISMATCH!>fun() = fun() {}<!>
|
||||
val a20: () -> () -> () -> Unit = fun() = fun() = {}
|
||||
val a21: () -> () -> () -> Int = fun() = fun() = {}
|
||||
val a21: () -> () -> () -> Int = <!INITIALIZER_TYPE_MISMATCH!>fun() = fun() = {}<!>
|
||||
}
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
class Foo<out T>(val baz: Baz<T>)
|
||||
|
||||
class Bar {
|
||||
val foo: Foo<*> = TODO()
|
||||
|
||||
fun <T> bar(): Baz<T> {
|
||||
return <!RETURN_TYPE_MISMATCH!>foo.baz<!>
|
||||
}
|
||||
}
|
||||
|
||||
typealias Baz<T> = (@UnsafeVariance T) -> Unit
|
||||
-1
@@ -1,4 +1,3 @@
|
||||
// FIR_IDENTICAL
|
||||
class Foo<out T>(val baz: Baz<T>)
|
||||
|
||||
class Bar {
|
||||
|
||||
@@ -14,7 +14,7 @@ class A() {
|
||||
|
||||
//more tests
|
||||
val g : () -> Unit = { 42 }
|
||||
val gFunction : () -> Unit = fun(): Int = 1
|
||||
val gFunction : () -> Unit = <!INITIALIZER_TYPE_MISMATCH!>fun(): Int = 1<!>
|
||||
|
||||
val h : () -> Unit = { doSmth() }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user