[FIR] Support smartcast after reference equality check

#KT-39000 Fixed
This commit is contained in:
Ivan Kylchik
2020-07-07 16:39:31 +03:00
parent 63f7e95c89
commit 85e822e283
8 changed files with 79 additions and 10 deletions
@@ -0,0 +1,12 @@
interface A
class B: A
val X = B()
fun foo(b: B) {}
fun main(a: A) {
if (a === X) {
foo(a)
}
}
@@ -0,0 +1,21 @@
FILE: kt39000.kt
public abstract interface A : R|kotlin/Any| {
}
public final class B : R|A| {
public constructor(): R|B| {
super<R|kotlin/Any|>()
}
}
public final val X: R|B| = R|/B.B|()
public get(): R|B|
public final fun foo(b: R|B|): R|kotlin/Unit| {
}
public final fun main(a: R|A|): R|kotlin/Unit| {
when () {
===(R|<local>/a|, R|/X|) -> {
R|/foo|(R|<local>/a|)
}
}
}