K2: Postpone inference forks resolution until FULL completion

It helps to use expected type information when choosing the branch
even in the nested calls

^KT-43296 In Progress
This commit is contained in:
Denis.Zharkov
2022-11-01 20:11:33 +01:00
committed by Space Team
parent c958c79362
commit 10d63cc52a
8 changed files with 88 additions and 1 deletions
@@ -0,0 +1,30 @@
// SKIP_TXT
interface Slice<V>
interface A
interface B : A
interface C : A
val SL0: Slice<A> = TODO()
val SL1: Slice<B> = TODO()
val SL2: Slice<C> = TODO()
fun <X> foo(s: Slice<X>): X? {
if (s.hashCode() == 0) {
return id(bar(s))
}
if (s === SL0) {
return id(bar(s))
}
if (s === SL1 || s === SL2) {
return id(bar(s))
}
return null
}
fun <T> id(x: T): T = x
fun <Y> bar(w: Slice<Y>): Y? = null
@@ -0,0 +1,30 @@
// SKIP_TXT
interface Slice<V>
interface A
interface B : A
interface C : A
val SL0: Slice<A> = TODO()
val SL1: Slice<B> = TODO()
val SL2: Slice<C> = TODO()
fun <X> foo(s: Slice<X>): X? {
if (s.hashCode() == 0) {
return id(bar(s))
}
if (s === SL0) {
return <!TYPE_MISMATCH, TYPE_MISMATCH!>id(bar(<!DEBUG_INFO_SMARTCAST!>s<!>))<!>
}
if (s === SL1 || s === SL2) {
return id(bar(s))
}
return null
}
fun <T> id(x: T): T = x
fun <Y> bar(w: Slice<Y>): Y? = null