d0f042ba93
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
46 lines
866 B
Kotlin
46 lines
866 B
Kotlin
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"
|
|
} |