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" }