[NI] Fix detecting expected type variable for postponed atoms
#KT-36819 Fixed
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
// !LANGUAGE: +NewInference
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
// ISSUE: KT-36819
|
||||
|
||||
fun <K> select(vararg x: K) = x[0]
|
||||
interface A
|
||||
class B: A
|
||||
class C: A
|
||||
fun <T> id1(x: T): T = x
|
||||
fun <R> id2(x: R): R = x
|
||||
|
||||
class Out<out R>(x: R)
|
||||
|
||||
fun main() {
|
||||
val x1 = select(id1 { B() }, id2 { C() })
|
||||
val x2 = select({ B() }, { C() }) // OK, CST = () -> A
|
||||
val x3 = select(id1(Out(B())), id2(Out(C()))) // OK, CST = Out<A>
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// !LANGUAGE: +NewInference
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
// ISSUE: KT-36819
|
||||
|
||||
fun <K> select(vararg x: K) = x[0]
|
||||
interface A
|
||||
class B: A
|
||||
class C: A
|
||||
fun <T> id1(x: T): T = x
|
||||
fun <R> id2(x: R): R = x
|
||||
|
||||
class Out<out R>(x: R)
|
||||
|
||||
fun main() {
|
||||
val x1 = select(id1 { B() }, id2 { <!TYPE_MISMATCH, TYPE_MISMATCH!>C()<!> })
|
||||
val x2 = select({ B() }, { C() }) // OK, CST = () -> A
|
||||
val x3 = select(id1(Out(B())), id2(Out(C()))) // OK, CST = Out<A>
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ T> id1(/*0*/ x: T): T
|
||||
public fun </*0*/ R> id2(/*0*/ x: R): R
|
||||
public fun main(): kotlin.Unit
|
||||
public fun </*0*/ K> select(/*0*/ vararg x: K /*kotlin.Array<out K>*/): K
|
||||
|
||||
public interface 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
|
||||
}
|
||||
|
||||
public final class B : A {
|
||||
public constructor B()
|
||||
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
|
||||
}
|
||||
|
||||
public final class C : A {
|
||||
public constructor C()
|
||||
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
|
||||
}
|
||||
|
||||
public final class Out</*0*/ out R> {
|
||||
public constructor Out</*0*/ out R>(/*0*/ x: R)
|
||||
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