| // WITH_STDLIB |
| // DUMP_IR |
| |
| import kotlin.test.* |
| |
| val sb = StringBuilder() |
| |
| fun foo() { |
| var i = 0 |
| l1@while (true) { |
| sb.appendLine("foo@l1") |
| try { |
| l2@while (true) { |
| if ((i++ % 2) == 0) continue@l2 |
| sb.appendLine("foo@l2") |
| if (i > 4) break@l1 |
| } |
| } finally { |
| } |
| } |
| } |
| |
| fun bar() { |
| var i = 0 |
| l1@do { |
| try { |
| sb.appendLine("bar@l1") |
| throw Exception() |
| } catch (e: Exception) { |
| l2@do { |
| if ((i++ % 2) == 0) continue@l2 |
| sb.appendLine("bar@l2") |
| if (i > 4) break@l1 |
| } while (true) |
| } |
| } while (true) |
| } |
| |
| fun qux() { |
| l1@for (i in 1..6) { |
| t1@try { |
| sb.appendLine("qux@t1") |
| throw Exception() |
| } |
| finally { |
| l2@ for (j in 1..6) { |
| if ((j % 2) == 0) continue@l2 |
| sb.appendLine("qux@l2") |
| if (j > 4) break@l1 |
| } |
| } |
| } |
| } |
| |
| fun box(): String { |
| foo() |
| bar() |
| qux() |
| |
| assertEquals(""" |
| foo@l1 |
| foo@l2 |
| foo@l2 |
| foo@l2 |
| bar@l1 |
| bar@l2 |
| bar@l2 |
| bar@l2 |
| qux@t1 |
| qux@l2 |
| qux@l2 |
| qux@l2 |
| |
| """.trimIndent(), sb.toString()) |
| return "OK" |
| } |