inline fun bar(block1: Function0, noinline block2: Function0) { block1.invoke() block2.invoke() } inline fun baz(crossinline block: Function0) { block.invoke() } inline fun foo(block: Function0) { block.invoke() } inline fun Iterable.myForEach(action: Function1) { { // BLOCK val tmp_0: Iterator = .iterator() while (tmp_0.hasNext()) { // BLOCK val element: T = tmp_0.next() action.invoke(p1 = element) } } } fun test1() { error("") /* ErrorExpression */ local fun () { error("") /* ErrorExpression */ } .invoke() local fun () { error("") /* ErrorExpression */ } .invoke() foo(block = local fun () { error("") /* ErrorExpression */ } ) foo(block = local fun () { error("") /* ErrorExpression */ } ) foo(block = local fun () { error("") /* ErrorExpression */ } ) foo(block = local fun () { error("") /* ErrorExpression */ } ) } fun test2() { L1@ while (true) { // BLOCK error("") /* ErrorExpression */ local fun () { error("") /* ErrorExpression */ } .invoke() local fun () { error("") /* ErrorExpression */ } .invoke() foo(block = local fun () { error("") /* ErrorExpression */ } ) foo(block = local fun () { error("") /* ErrorExpression */ } ) foo(block = local fun () { error("") /* ErrorExpression */ } ) foo(block = local fun () { error("") /* ErrorExpression */ } ) } } fun test3() { L1@ while (true) { // BLOCK val lambda: Function0 = local fun () { error("") /* ErrorExpression */ local fun () { error("") /* ErrorExpression */ } .invoke() local fun () { error("") /* ErrorExpression */ } .invoke() foo(block = local fun () { error("") /* ErrorExpression */ } ) foo(block = local fun () { error("") /* ErrorExpression */ } ) foo(block = local fun () { error("") /* ErrorExpression */ } ) foo(block = local fun () { error("") /* ErrorExpression */ } ) } } } fun test4() { while (local fun (): Nothing { return error("") /* ErrorExpression */ } .invoke()) { // BLOCK } while (local fun (): Nothing { return error("") /* ErrorExpression */ } .invoke()) { // BLOCK } while (local fun () { error("") /* ErrorExpression */ } .invoke() /*as Boolean */) { // BLOCK } while (local fun () { error("") /* ErrorExpression */ } .invoke() /*as Boolean */) { // BLOCK } while (foo(block = local fun () { error("") /* ErrorExpression */ } ) /*as Boolean */) { // BLOCK } while (foo(block = local fun () { error("") /* ErrorExpression */ } ) /*as Boolean */) { // BLOCK } while (foo(block = local fun () { error("") /* ErrorExpression */ } ) /*as Boolean */) { // BLOCK } while (foo(block = local fun () { error("") /* ErrorExpression */ } ) /*as Boolean */) { // BLOCK } } fun test5() { listOf(elements = [1, 2, 3]).forEach(action = local fun (i: Int) { when { EQEQ(arg0 = i, arg1 = 2) -> error("") /* ErrorExpression */ } } ) listOf(elements = [1, 2, 3]).forEach(action = local fun (i: Int) { when { EQEQ(arg0 = i, arg1 = 2) -> error("") /* ErrorExpression */ } } ) listOf(elements = [1, 2, 3]).forEach(action = local fun (i: Int) { when { EQEQ(arg0 = i, arg1 = 2) -> error("") /* ErrorExpression */ } } ) listOf(elements = [1, 2, 3]).forEach(action = local fun (i: Int) { when { EQEQ(arg0 = i, arg1 = 2) -> error("") /* ErrorExpression */ } } ) } fun test6() { while (true) { // BLOCK bar(block1 = local fun () { return Unit } , block2 = local fun () { error("") /* ErrorExpression */ } ) bar(block1 = local fun () { return Unit } , block2 = local fun () { error("") /* ErrorExpression */ } ) bar(block1 = local fun () { } , block2 = local fun () { error("") /* ErrorExpression */ } ) bar(block1 = local fun () { } , block2 = local fun () { error("") /* ErrorExpression */ } ) } } fun test7() { 1.rangeTo(other = 3).myForEach(action = local fun (i: Int) { when { EQEQ(arg0 = i, arg1 = 2) -> { // BLOCK error("") /* ErrorExpression */ } } } ) } fun test8() { while (true) { // BLOCK baz(block = local fun () { error("") /* ErrorExpression */ } ) } }