More aggressive DCE should honor debugger invariants

- A LINENUMEBER node is "dead" if the corresponding instruction interval
 contains at least one "dead" bytecode instruction
 and no live bytecode instructions

- Observable local variable lifetimes should be taken into account
 when determining if a NOP is required for debugger.
This commit is contained in:
Dmitry Petrov
2017-05-15 14:59:50 +03:00
parent 65799a5cb4
commit 84e54124a2
8 changed files with 121 additions and 44 deletions
@@ -0,0 +1,20 @@
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