== myRun == inline fun myRun(block: () -> Unit): Unit { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block() } --------------------- L0: 1 INIT: in: {} out: {} v(block: () -> Unit) INIT: in: {} out: {} magic[FAKE_INITIALIZER](block: () -> Unit) -> INIT: in: {} out: {} w(block|) INIT: in: {} out: {} 2 mark({ contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block() }) INIT: in: {} out: {} mark({ callsInPlace(block, InvocationKind.EXACTLY_ONCE) }) jmp?(L2) d({ callsInPlace(block, InvocationKind.EXACTLY_ONCE) }) L2 [after local declaration]: r({ callsInPlace(block, InvocationKind.EXACTLY_ONCE) }) -> mark(contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }) call(contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }, contract|) -> r(block) -> mark(block()) call(block(), invoke|) -> L1: 1 error: sink: USE: in: {} out: {} ===================== == anonymous_0 == { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } --------------------- L3: 3 INIT: in: {} out: {} 4 mark(callsInPlace(block, InvocationKind.EXACTLY_ONCE)) magic[IMPLICIT_RECEIVER](callsInPlace(block, InvocationKind.EXACTLY_ONCE)) -> r(block) -> mark(InvocationKind.EXACTLY_ONCE) r(EXACTLY_ONCE) -> mark(callsInPlace(block, InvocationKind.EXACTLY_ONCE)) call(callsInPlace(block, InvocationKind.EXACTLY_ONCE), callsInPlace|, , ) -> L4: 3 error: sink: USE: in: {} out: {} ===================== == test == fun test() { myRun { throw java.lang.IllegalArgumentException() } val x: Int = 42 } --------------------- L0: 1 INIT: in: {} out: {} 2 mark({ myRun { throw java.lang.IllegalArgumentException() } val x: Int = 42 }) mark({ throw java.lang.IllegalArgumentException() }) r({ throw java.lang.IllegalArgumentException() }) -> mark(myRun { throw java.lang.IllegalArgumentException() }) call(myRun { throw java.lang.IllegalArgumentException() }, myRun|) -> L2 [before inlined declaration]: inlined({ throw java.lang.IllegalArgumentException() }) USE: in: {} out: {} L3 [after inlined declaration]: - v(val x: Int = 42) - r(42) -> - w(x|) L1: 1 INIT: in: {} out: {} error: sink: USE: in: {} out: {} ===================== == inlined anonymous_1 == { throw java.lang.IllegalArgumentException() } --------------------- L4: 3 INIT: in: {} out: {} 4 mark(throw java.lang.IllegalArgumentException()) mark(throw java.lang.IllegalArgumentException()) mark(java.lang.IllegalArgumentException()) mark(IllegalArgumentException()) call(IllegalArgumentException(), ) -> throw (throw java.lang.IllegalArgumentException()|) USE: in: {} out: {} L5: - 3 error: INIT: in: {} out: {} sink: USE: in: {} out: {} =====================