psi2ir: keep the type of when when possible

Ideally, the type of `IrWhen` should be provided by type inference for
a consistent behavior. `USED_AS_EXPRESSION` from CFG isn't always
consistent with type inference, unfortunately.

The behavior is now aligned with `if`. The type of `when` is kept when
it *can* be an expression, instead of whether it is used or not.
This commit is contained in:
Ting-Yuan Huang
2019-05-23 10:28:09 -07:00
committed by max-kammerer
parent cd651be461
commit 1b4d26e490
7 changed files with 69 additions and 8 deletions
@@ -1,7 +1,3 @@
// Even before any IR lowerings, the type of `when` is determined to be
// Unit even though the outer `if` still returns `Int?`. This results
// in a ClassCastException when that Unit is converted into a Number.
// IGNORE_BACKEND: JVM_IR
fun test(
b: Boolean,
i: Int