NI: do type checking for anonymous functions not inside a call
^KT-38890 Fixed ^KT-38439 Fixed
This commit is contained in:
Vendored
+1
-1
@@ -16,6 +16,6 @@ fun test(s: Sub) {
|
||||
t: Trait -> s
|
||||
}
|
||||
|
||||
foo(<!TYPE_MISMATCH!>fun(<!EXPECTED_PARAMETER_TYPE_MISMATCH!>t: Sub<!>) = s<!>)
|
||||
foo(<!NI;TYPE_MISMATCH, TYPE_MISMATCH!>fun(<!EXPECTED_PARAMETER_TYPE_MISMATCH!>t: Sub<!>) = s<!>)
|
||||
foo(<!TYPE_MISMATCH!>fun(t): Super = s<!>)
|
||||
}
|
||||
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNCHECKED_CAST
|
||||
// Issues: KT-38890, KT-38439
|
||||
|
||||
fun foo(x: () -> Int) {}
|
||||
|
||||
fun <T>id(x: T) = x
|
||||
|
||||
// Before the fix, there wasn't any type mismatch error in NI due to result type not being a subtype of expected type
|
||||
fun main() {
|
||||
val x: () -> Int = { "" }
|
||||
|
||||
val a0: () -> Int = fun(): String = "1"
|
||||
val a1: () -> Int = (fun() = "1")
|
||||
val a2: () -> Unit = (fun() = "1")
|
||||
val a3: Unit = (fun() = "1")
|
||||
val a4 = (fun() = "1")
|
||||
val a5 = (fun(): String = "1")
|
||||
val a6: () -> Int = (fun() = 1)
|
||||
val a7: () -> Int = (fun(): String = "1") as () -> Int
|
||||
val a8: () -> Int = fun(): String = "1"
|
||||
val a9: () -> () -> () -> Int = fun(): () -> () -> String = fun(): () -> String = fun(): String = "1"
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(fun(): String = "1")
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(((fun(): String = "1")))
|
||||
|
||||
val a10: Int.(String) -> Int = fun (x: String) = 10
|
||||
val a11: () -> () -> () -> Int = fun() = fun() = fun(): String = "1"
|
||||
|
||||
val a12: Int = fun(): String = "1"
|
||||
val a13: Int = fun() = fun(): String = "1"
|
||||
val a14: Int = fun() = fun() = "1"
|
||||
val a15: Int = fun() = fun() = {}
|
||||
val a16: Int = fun() = fun() {}
|
||||
|
||||
val a17: () -> Unit = fun() {}
|
||||
val a18: () -> Int = fun() {}
|
||||
val a19: () -> () -> Int = fun() = fun() {}
|
||||
val a20: () -> () -> () -> Unit = fun() = fun() = {}
|
||||
val a21: () -> () -> () -> Int = fun() = fun() = {}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNCHECKED_CAST
|
||||
// Issues: KT-38890, KT-38439
|
||||
|
||||
fun foo(x: () -> Int) {}
|
||||
|
||||
fun <T>id(x: T) = x
|
||||
|
||||
// Before the fix, there wasn't any type mismatch error in NI due to result type not being a subtype of expected type
|
||||
fun main() {
|
||||
val x: () -> Int = { <!TYPE_MISMATCH!>""<!> }
|
||||
|
||||
val a0: () -> Int = <!TYPE_MISMATCH!>fun(): String = "1"<!>
|
||||
val a1: () -> Int = (<!TYPE_MISMATCH!>fun() = "1"<!>)
|
||||
val a2: () -> Unit = (<!TYPE_MISMATCH!>fun() = "1"<!>)
|
||||
val a3: Unit = (<!TYPE_MISMATCH!>fun() = "1"<!>)
|
||||
val a4 = (fun() = "1")
|
||||
val a5 = (fun(): String = "1")
|
||||
val a6: () -> Int = (fun() = 1)
|
||||
val a7: () -> Int = (fun(): String = "1") as () -> Int
|
||||
val a8: () -> Int = <!TYPE_MISMATCH!>fun(): String = "1"<!>
|
||||
val a9: () -> () -> () -> Int = <!TYPE_MISMATCH!>fun(): () -> () -> String = fun(): () -> String = fun(): String = "1"<!>
|
||||
|
||||
foo(<!TYPE_MISMATCH!>fun(): String = "1"<!>)
|
||||
foo(((<!TYPE_MISMATCH!>fun(): String = "1"<!>)))
|
||||
|
||||
val a10: Int.(String) -> Int = <!TYPE_MISMATCH!>fun (x: String) = 10<!>
|
||||
val a11: () -> () -> () -> Int = <!TYPE_MISMATCH!>fun() = fun() = fun(): String = "1"<!>
|
||||
|
||||
val a12: Int = <!TYPE_MISMATCH!>fun(): String = "1"<!>
|
||||
val a13: Int = <!TYPE_MISMATCH!>fun() = fun(): String = "1"<!>
|
||||
val a14: Int = <!TYPE_MISMATCH!>fun() = fun() = "1"<!>
|
||||
val a15: Int = <!TYPE_MISMATCH!>fun() = fun() = {}<!>
|
||||
val a16: Int = <!TYPE_MISMATCH!>fun() = fun() {}<!>
|
||||
|
||||
val a17: () -> Unit = fun() {}
|
||||
val a18: () -> Int = <!TYPE_MISMATCH!>fun() {}<!>
|
||||
val a19: () -> () -> Int = <!TYPE_MISMATCH!>fun() = fun() {}<!>
|
||||
val a20: () -> () -> () -> Unit = fun() = fun() = {}
|
||||
val a21: () -> () -> () -> Int = <!TYPE_MISMATCH!>fun() = fun() = {}<!>
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
public fun foo(/*0*/ x: () -> kotlin.Int): kotlin.Unit
|
||||
public fun </*0*/ T> id(/*0*/ x: T): T
|
||||
public fun main(): kotlin.Unit
|
||||
Reference in New Issue
Block a user