FIR CFG: when unifying flows, group statements by assignment
Consider a function `run2` that has 2 lambda arguments called in place.
We don't know the order in which they're called, so here:
var x: Any? = something
run2(
{ x = null },
{ x as String },
)
// <--
it's not correct to simply `&&` the statements together, as that would
produce `x is Nothing? && x is String && x is Any?`. Instead, statements
should be grouped by assignment first, and different groups are `||`-ed.
This means in the above example we now get `x is Nothing? || (x is Any?
&& x is String)` == `x is String?`.
This commit is contained in:
@@ -73,6 +73,6 @@ fun test7(x: String?) {
|
||||
1,
|
||||
run { p.length; 123 } // Bad (p = null)
|
||||
)
|
||||
p.length // Bad (p = null)
|
||||
p<!UNSAFE_CALL!>.<!>length // Bad (p = null)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user