Ignore constraint from implicit 'in Nothing'
From Array<T> <: Array<out Int> we may generate T >: Nothing (implicit) and T <: Int (explicit). Without ignoring we'll infer 'Nothing' for T too often
This commit is contained in:
+15
@@ -0,0 +1,15 @@
|
||||
// !CHECK_TYPE
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
|
||||
class Foo<T>
|
||||
|
||||
fun <T> foo1(f: (T) -> Unit): Foo<T> = Foo()
|
||||
inline fun <reified T> foo2(f: (T) -> Unit): Foo<T> = Foo()
|
||||
|
||||
fun test1() {
|
||||
val f1: Foo<out Int> = foo1 { it checkType { it : _<Int> } }
|
||||
val f2: Foo<in Nothing> = foo1 { it <!UNREACHABLE_CODE!>checkType { it : _<Nothing> }<!> }
|
||||
|
||||
val f3: Foo<out Int> = foo2 { it checkType { it : _<Int> } }
|
||||
val f4: Foo<in Nothing> = <!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo2<!> { it <!UNREACHABLE_CODE!>checkType { it : _<Nothing> }<!> }
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package
|
||||
|
||||
internal fun </*0*/ T> foo1(/*0*/ f: (T) -> kotlin.Unit): Foo<T>
|
||||
kotlin.inline() internal fun </*0*/ reified T> foo2(/*0*/ f: (T) -> kotlin.Unit): Foo<T>
|
||||
internal fun test1(): kotlin.Unit
|
||||
|
||||
internal final class Foo</*0*/ T> {
|
||||
public constructor Foo</*0*/ T>()
|
||||
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