// LANGUAGE: +ProperFinally
var result = ""

fun test() {
    try {
        try {
            try {
                try {
                    result += "try"
                    return
                } catch (fail: Throwable) {
                    result += " catch"
                }
            } finally {
                result += " finally 1"
                throw RuntimeException(" exception from finally 1")
            }
        } catch (e: Throwable) {
            result += " catch 2"
            result += e.message
        }
    } finally {
        result += " finally 2"
        throw RuntimeException("Fail 2")
    }
}

fun box(): String {
    try {
        test()
        return "fail: expected exception"
    } catch (e: RuntimeException) {
        if (e.message != "Fail 2") return "wrong exception: ${e.message}"
    }

    return if (result == "try finally 1 catch 2 exception from finally 1 finally 2") "OK" else "fail: $result"
}