Traverse store-load chains for POP instructions

POP instructions can be only live usages for functional parameters,
e.g., when corresponding invoke is in dead code (KT-17591).
This commit is contained in:
Dmitry Petrov
2017-04-25 18:07:57 +03:00
parent fe571a7dfa
commit a39a0abb2a
6 changed files with 70 additions and 2 deletions
@@ -0,0 +1,7 @@
// FILE: 1.kt
inline fun alwaysOk(s: String, fn: (String) -> String): String {
return fn(return "OK")
}
// FILE: 2.kt
fun box() = alwaysOk("what?") { it }
@@ -0,0 +1,7 @@
// FILE: 1.kt
inline fun alwaysOk(s: String, fn: (String) -> String): String {
try { return fn(return "fail") } finally { fn(return "OK") }
}
// FILE: 2.kt
fun box() = alwaysOk("what?") { it }
@@ -0,0 +1,15 @@
// FILE: 1.kt
inline fun alwaysOk(s: String, fn: (String) -> String): String {
try {
throw Exception()
}
catch(e: Exception) {
fn(return "fail")
}
finally {
fn(return "OK")
}
}
// FILE: 2.kt
fun box() = alwaysOk("what?") { it }