mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-08 15:53:19 +00:00
* In blocks, discard the result of any statement that has a return type other than void. This was previously done by wrapping each statement into an "implicit Unit conversion" that was actually compiled down to a stack pop instead. If an expression happened to already have type Unit, however, such a conversion was not inserted, resulting in a stray reference on the stack. These conversions are now redundant and should probably be removed. * In assignments and non-exhaustive conditionals, materialize a Unit on the stack to avoid depth mismatches that trip up the bytecode validator. Because such expressions are generally used at block level (and, indeed, the frontend will reject a non-exhaustive conditional used as an expression), combined with the above change this results in no additional GETSTATIC opcodes, as they are immediately removed by the peephole optimizer.
24 lines
428 B
Kotlin
Vendored
24 lines
428 B
Kotlin
Vendored
package inlineInIfFalseDex
|
|
|
|
fun inlineIfFalse() {
|
|
val bar = ""
|
|
//Breakpoint!
|
|
if (inlineCall { true }) {
|
|
foo()
|
|
}
|
|
foo()
|
|
}
|
|
|
|
fun foo() {}
|
|
|
|
inline fun inlineCall(predicate: (String?) -> Boolean): Boolean {
|
|
return false
|
|
}
|
|
|
|
// 0 LINENUMBER 7
|
|
// 0 LINENUMBER 8
|
|
// 1 LINENUMBER 9
|
|
|
|
// Not actually inlined, so there is a LINENUMBER 7 because the if's body is not considered dead.
|
|
// IGNORE_BACKEND: JVM_IR
|