inline fun bar(block1: Function0, noinline block2: Function0) { block1.invoke() block2.invoke() } inline fun foo(block: Function0) { block.invoke() } fun test1() { while (true) { // BLOCK foo(block = local fun () { break } ) foo(block = local fun () { continue } ) foo(block = local fun () { break } ) foo(block = local fun () { continue } ) } } fun test2() { while (true) { // BLOCK bar(block1 = local fun () { break } , block2 = local fun () { return Unit } ) bar(block1 = local fun () { continue } , block2 = local fun () { return Unit } ) bar(block1 = local fun () { break } , block2 = local fun () { } ) bar(block1 = local fun () { continue } , block2 = local fun () { } ) } }