Properly generate exception table for try/catch block

KT-3549 'Finally' block not run when re-throwing exception
KT-3867 When catched exception occurs in finnaly block it invokes additional catch and itself

  #KT-3549 Fixed
  #KT-3867 Fixed
This commit is contained in:
Mikhael Bogdanov
2013-08-15 17:22:20 +04:00
parent eaf0c2cb84
commit d0f042ba93
6 changed files with 345 additions and 60 deletions
@@ -0,0 +1,46 @@
fun fail() = if (true) throw RuntimeException() else 1
fun test1(): String {
var r = ""
try {
try {
r += "Try"
return r
} catch (e: RuntimeException) {
r += "Catch"
return r
}
finally {
r += "Finally"
fail()
}
} catch (e: RuntimeException) {
return r
}
}
fun test2(): String {
var r = ""
try {
try {
r += "Try"
} catch (e: RuntimeException) {
r += "Catch"
}
finally {
r += "Finally"
fail()
}
} catch (e: RuntimeException) {
return r
}
return r + "Fail"
}
fun box(): String {
if (test1() != "TryFinally") return "fail1: ${test1()}"
if (test2() != "TryFinally") return "fail2: ${test2()}"
return "OK"
}