FIR: Add nullability smartcast after !is check

^KT-39072 Fixed
This commit is contained in:
Denis Zharkov
2020-06-11 13:44:09 +03:00
parent 24948a8b3f
commit 7b61bf9178
5 changed files with 57 additions and 4 deletions
@@ -0,0 +1,17 @@
interface A {
val b: B
}
interface B
interface C : B {
fun q(): Boolean
}
fun A.foo(): String = ""
fun main(a: A?) {
val lb = a?.b
if (lb !is C) return
a.foo().length
}
@@ -0,0 +1,25 @@
FILE: boundSafeCallAndIsCheck.kt
public abstract interface A : R|kotlin/Any| {
public abstract val b: R|B|
public get(): R|B|
}
public abstract interface B : R|kotlin/Any| {
}
public abstract interface C : R|B| {
public abstract fun q(): R|kotlin/Boolean|
}
public final fun R|A|.foo(): R|kotlin/String| {
^foo String()
}
public final fun main(a: R|A?|): R|kotlin/Unit| {
lval lb: R|B?| = R|<local>/a|?.{ $subj$.R|/A.b| }
when () {
(R|<local>/lb| !is R|C|) -> {
^main Unit
}
}
R|<local>/a|.R|/foo|().R|kotlin/String.length|
}