[NI] Fix detecting expected type variable for postponed atoms

#KT-36819 Fixed
This commit is contained in:
Dmitriy Novozhilov
2020-02-19 16:41:08 +03:00
parent 7e832e50ac
commit 102d5c7d5a
7 changed files with 88 additions and 2 deletions
@@ -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
}