//KT-3869 Loops and finally: outer finally block not run class MyString { var s = "" fun plus(x : String) : MyString { s += x return this } override fun toString(): String { return s } } fun test1() : MyString { var r = MyString() try { r + "Try" while(r.toString() != "") { return r + "Loop" } return r + "Fail" } finally { r + "Finally" } } fun test2() : MyString { var r = MyString() try { r + "Try" do { if (r.toString() != "") { return r + "Loop" } } while (r.toString() != "") return r + "Fail" } finally { r + "Finally" } } fun test3() : MyString { var r = MyString() try { r + "Try" for(i in 1..2) { r + "Loop" return r } return r + "Fail" } finally { r + "Finally" } } fun box(): String { if (test1().toString() != "TryLoopFinally") return "fail1: ${test1()}" if (test2().toString() != "TryLoopFinally") return "fail2: ${test2()}" if (test3().toString() != "TryLoopFinally") return "fail3: ${test3()}" return "OK" }