Fix coercion to Unit with equal Nothing constraint
#KT-39669 Fixed
This commit is contained in:
Vendored
+53
@@ -0,0 +1,53 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
// FILE: A.java
|
||||
|
||||
public class A {
|
||||
public static <T> T flexible(T x) { return x; }
|
||||
}
|
||||
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
class Inv<K>
|
||||
|
||||
fun launch(block: () -> Unit) {}
|
||||
fun <T> run(block: () -> T): T = block()
|
||||
fun <T> run(inv: Inv<T>, block: () -> T): T = block()
|
||||
|
||||
fun test(i: Inv<Nothing>, iUnit: Inv<Unit>) {
|
||||
launch {
|
||||
run<Nothing> { TODO("") }
|
||||
}
|
||||
launch {
|
||||
run { TODO("") }
|
||||
}
|
||||
launch {
|
||||
run<String> { "" }
|
||||
}
|
||||
launch {
|
||||
run<Nothing?> { null }
|
||||
}
|
||||
launch {
|
||||
run { null }
|
||||
}
|
||||
launch {
|
||||
run(i) { TODO() }
|
||||
}
|
||||
launch {
|
||||
run(A.flexible(i)) { TODO() }
|
||||
}
|
||||
launch {
|
||||
run(A.flexible(iUnit)) { 42 }
|
||||
}
|
||||
launch {
|
||||
@Suppress("UNSUPPORTED")
|
||||
<!INAPPLICABLE_CANDIDATE!>run<!><dynamic> { "" }
|
||||
}
|
||||
|
||||
if (iUnit is String) {
|
||||
launch {
|
||||
run(A.flexible(iUnit)) { 42 }
|
||||
}
|
||||
}
|
||||
}
|
||||
Vendored
+53
@@ -0,0 +1,53 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
// FILE: A.java
|
||||
|
||||
public class A {
|
||||
public static <T> T flexible(T x) { return x; }
|
||||
}
|
||||
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
class Inv<K>
|
||||
|
||||
fun launch(block: () -> Unit) {}
|
||||
fun <T> run(block: () -> T): T = block()
|
||||
fun <T> run(inv: Inv<T>, block: () -> T): T = block()
|
||||
|
||||
fun test(i: Inv<Nothing>, iUnit: Inv<Unit>) {
|
||||
launch {
|
||||
run<Nothing> { TODO("") }
|
||||
}
|
||||
launch {
|
||||
run { TODO("") }
|
||||
}
|
||||
launch {
|
||||
run<String> { "" }
|
||||
}
|
||||
launch {
|
||||
run<Nothing?> { null }
|
||||
}
|
||||
launch {
|
||||
run { <!UNUSED_EXPRESSION!>null<!> }
|
||||
}
|
||||
launch {
|
||||
run(i) { TODO() }
|
||||
}
|
||||
launch {
|
||||
run(A.flexible(i)) { TODO() }
|
||||
}
|
||||
launch {
|
||||
run(A.flexible(iUnit)) { <!UNUSED_EXPRESSION!>42<!> }
|
||||
}
|
||||
launch {
|
||||
@Suppress("UNSUPPORTED")
|
||||
run<dynamic> { <!UNUSED_EXPRESSION!>""<!> }
|
||||
}
|
||||
|
||||
if (iUnit is <!INCOMPATIBLE_TYPES!>String<!>) {
|
||||
launch {
|
||||
run(A.flexible(iUnit)) { <!UNUSED_EXPRESSION!>42<!> }
|
||||
}
|
||||
}
|
||||
}
|
||||
Vendored
+23
@@ -0,0 +1,23 @@
|
||||
package
|
||||
|
||||
public fun launch(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public fun </*0*/ T> run(/*0*/ block: () -> T): T
|
||||
public fun </*0*/ T> run(/*0*/ inv: Inv<T>, /*1*/ block: () -> T): T
|
||||
public fun test(/*0*/ i: Inv<kotlin.Nothing>, /*1*/ iUnit: Inv<kotlin.Unit>): kotlin.Unit
|
||||
|
||||
public open class A {
|
||||
public constructor A()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
// Static members
|
||||
public open fun </*0*/ T : kotlin.Any!> flexible(/*0*/ x: T!): T!
|
||||
}
|
||||
|
||||
public final class Inv</*0*/ K> {
|
||||
public constructor Inv</*0*/ K>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user