// LANGUAGE: +BreakContinueInInlineLambdas inline fun foo(block: () -> T): T = block() @Target(AnnotationTarget.EXPRESSION) @Retention(AnnotationRetention.SOURCE) public annotation class SomeAnnotation fun test() { while (true) { fun local1(tag: Int) { when(tag) { 0 -> break 1 -> foo { break } 2 -> foo(@SomeAnnotation { break }) 3 -> foo(fun () { break }) 4 -> foo(@SomeAnnotation fun () { break }) } } } } fun test2() { while (true) { {tag: Int -> when(tag) { 0 -> continue 1 -> foo { continue } 2 -> foo(@SomeAnnotation { continue }) 3 -> foo(fun () { continue }) 4 -> foo(@SomeAnnotation fun () { continue }) } } } } fun test3() { while (true) { class LocalClass(val tag: Int) { init { when(tag) { 0 -> continue 1 -> foo { continue } 2 -> foo(@SomeAnnotation { continue }) 3 -> foo(fun () { continue }) 4 -> foo(@SomeAnnotation fun () { continue }) } } fun foo() { when(tag) { 0 -> break 1 -> foo { break } 2 -> foo(@SomeAnnotation { break }) 3 -> foo(fun () { break }) 4 -> foo(@SomeAnnotation fun () { break }) } } } } } fun test4(tag: Int) { while (true) { object: Any() { init { when(tag) { 0 -> break 1 -> foo { break } 2 -> foo(@SomeAnnotation { break }) 3 -> foo(fun () { break }) 4 -> foo(@SomeAnnotation fun () { break }) } } } } } fun test5() { while (true) { class LocalClass(val s: String) { constructor(tag: Int) : this("") { when(tag) { 0 -> break 1 -> foo { break } 2 -> foo(@SomeAnnotation { break }) 3 -> foo(fun () { break }) 4 -> foo(@SomeAnnotation fun () { break }) } } } } } fun test6() { while (true) { class LocalClass(val tag: Int) { init { when(tag) { 0 -> break 1 -> foo { break } 2 -> foo(@SomeAnnotation { break }) 3 -> foo(fun () { break }) 4 -> foo(@SomeAnnotation fun () { break }) } } init { when(tag) { 0 -> continue 1 -> foo { continue } 2 -> foo(@SomeAnnotation { continue }) 3 -> foo(fun () { continue }) 4 -> foo(@SomeAnnotation fun () { continue }) } } } } } fun test7() { while (true) { class LocalClass(val tag: Int) { val x: Int = if (true) { when(tag) { 0 -> break 1 -> foo { break } 2 -> foo(@SomeAnnotation { break }) 3 -> foo(fun (): Int { break }) 4 -> foo(@SomeAnnotation fun (): Int { break }) else -> 1 } } else { when(tag) { 0 -> continue 1 -> foo { continue } 2 -> foo(@SomeAnnotation { continue }) 3 -> foo(fun (): Int { continue }) 4 -> foo(@SomeAnnotation fun (): Int { continue }) else -> 2 } } } } } fun test8() { while (true) { class LocalClass(val x: Int) { constructor(tag: Int, unused: Boolean) : this( when(tag) { 0 -> break 1 -> foo { break } 2 -> foo(@SomeAnnotation { break }) 3 -> foo(fun (): Int { break }) 4 -> foo(@SomeAnnotation fun (): Int { break }) else -> 1 } ) } } }