FIR: initial support of suspend conversion on arguments

This commit is contained in:
Jinseong Jeon
2020-09-08 14:59:28 -07:00
committed by Mikhail Glukhikh
parent 49679f3145
commit 6de8ba40c1
19 changed files with 393 additions and 119 deletions
@@ -14,9 +14,9 @@ fun test(
foo1 { "str" }
foo1(f0)
<!INAPPLICABLE_CANDIDATE!>foo1<!>(f1)
<!INAPPLICABLE_CANDIDATE!>foo2<!>(f2)
<!INAPPLICABLE_CANDIDATE!>foo3<!>(f3)
foo1(f1)
foo2(f2)
foo3(f3)
<!INAPPLICABLE_CANDIDATE!>foo1<!>(f2)
<!INAPPLICABLE_CANDIDATE!>foo1<!>(f3)
@@ -10,21 +10,21 @@ fun <T, K> foo3(f: suspend (T) -> K): Inv2<T, K> = TODO()
fun <I> id(e: I): I = e
fun test(f: (Int) -> String, g: () -> String) {
val a0 = <!INAPPLICABLE_CANDIDATE!>foo1<!>(f)
val a0 = foo1(f)
a0
val a1 = <!INAPPLICABLE_CANDIDATE!>foo2<!>(g)
val a1 = foo2(g)
a1
val a2 = <!INAPPLICABLE_CANDIDATE!>foo3<!>(f)
val a2 = foo3(f)
a2
val a3 = <!INAPPLICABLE_CANDIDATE!>foo1<!>(id(f))
val a3 = foo1(id(f))
a3
val a4 = <!INAPPLICABLE_CANDIDATE!>foo2<!>(id(g))
val a4 = foo2(id(g))
a4
val a5 = <!INAPPLICABLE_CANDIDATE!>foo3<!>(id(f))
val a5 = foo3(id(f))
a5
}
@@ -9,6 +9,6 @@ fun foo(s: SuspendRunnable) {}
fun test(f: () -> Unit) {
foo { }
<!INAPPLICABLE_CANDIDATE!>foo<!>(f)
foo(f)
}
@@ -14,6 +14,6 @@ fun test1() {
// candidate without suspend conversions is more specific
fun test2(f: () -> Int, g: suspend () -> Int) {
foo(f)
<!AMBIGUITY!>foo<!>(f)
foo(g)
}
@@ -1,11 +0,0 @@
// !LANGUAGE: +SuspendConversion
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun foo(f: () -> String, g: suspend () -> String, h: suspend () -> String) {}
fun test(f: () -> String, g: suspend () -> String) {
<!INAPPLICABLE_CANDIDATE!>foo<!>(f, f, f)
<!INAPPLICABLE_CANDIDATE!>foo<!>(f, { "str" }, f)
<!INAPPLICABLE_CANDIDATE!>foo<!>(f, f, g)
foo(f, g, g)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +SuspendConversion
// !DIAGNOSTICS: -UNUSED_PARAMETER
@@ -12,7 +12,7 @@ object Test1 {
fun call(r: SuspendRunnable) {}
fun bar(f: () -> Unit) {
<!DEBUG_INFO_CALL("fqName: Test1.call; typeCall: function")!>call(f)<!>
<!DEBUG_INFO_CALL("fqName: Test1.Scope.call; typeCall: function")!>call(f)<!>
}
}
}
@@ -24,7 +24,7 @@ object Test2 {
fun call(r: SuspendRunnable) {}
fun bar(f: () -> Unit) {
<!DEBUG_INFO_CALL("fqName: Test2.call; typeCall: function")!>call(f)<!>
<!DEBUG_INFO_CALL("fqName: Test2.Scope.call; typeCall: function")!>call(f)<!>
}
}
}
@@ -8,7 +8,7 @@ object Test1 {
fun foo(f: suspend () -> Unit) {}
fun test(g: () -> Unit) {
<!DEBUG_INFO_CALL("fqName: Test1.foo; typeCall: function")!>foo(g)<!>
<!DEBUG_INFO_CALL("fqName: Test1.Scope.foo; typeCall: function")!>foo(g)<!>
}
}
}
@@ -16,9 +16,9 @@ fun test(
foo1 { "str" }
foo1(f0)
<!INAPPLICABLE_CANDIDATE!>foo1<!>(f1)
<!INAPPLICABLE_CANDIDATE!>foo2<!>(f2)
<!INAPPLICABLE_CANDIDATE!>foo3<!>(f3)
foo1(f1)
foo2(f2)
foo3(f3)
foo1(::bar)
@@ -1,20 +0,0 @@
// !LANGUAGE: +SuspendConversion
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun useSuspendVararg(vararg sfn: suspend () -> Unit) {}
fun testSuspendConversionInVarargElementsSome(
sf1: suspend () -> Unit,
f2: () -> Unit,
sf3: suspend () -> Unit
) {
<!INAPPLICABLE_CANDIDATE!>useSuspendVararg<!>(sf1, f2, sf3)
}
fun testSuspendConversionInVarargElementsAll(
f1: () -> Unit,
f2: () -> Unit,
f3: () -> Unit
) {
<!INAPPLICABLE_CANDIDATE!>useSuspendVararg<!>(f1, f2, f3)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +SuspendConversion
// !DIAGNOSTICS: -UNUSED_PARAMETER