== foo == fun foo(flag: Boolean): Int { when (flag) { true -> return 1 false -> return 0 } } --------------------- L0: 1 v(flag: Boolean) magic[FAKE_INITIALIZER](flag: Boolean) -> w(flag|) 2 mark({ when (flag) { true -> return 1 false -> return 0 } }) mark(when (flag) { true -> return 1 false -> return 0 }) r(flag) -> mark(true -> return 1) mark(true) r(true) -> magic[EQUALS_IN_WHEN_CONDITION](true|, ) -> jmp?(L4|) NEXT:[mark(false -> return 0), r(1) -> ] L3 ['when' entry body]: r(1) -> ret(*|) L1 NEXT:[] - jmp(L2) NEXT:[merge(when (flag) { true -> return 1 false -> return 0 }|!, !) -> ] PREV:[] L4 [next 'when' entry]: mark(false -> return 0) PREV:[jmp?(L4|)] mark(false) r(false) -> magic[EQUALS_IN_WHEN_CONDITION](false|, ) -> jmp?(L6|) NEXT:[magic[EXHAUSTIVE_WHEN_ELSE](when (flag) { true -> return 1 false -> return 0 }) -> , r(0) -> ] L5 ['when' entry body]: r(0) -> ret(*|) L1 NEXT:[] - jmp(L2) NEXT:[merge(when (flag) { true -> return 1 false -> return 0 }|!, !) -> ] PREV:[] L6 [next 'when' entry]: magic[EXHAUSTIVE_WHEN_ELSE](when (flag) { true -> return 1 false -> return 0 }) -> PREV:[jmp?(L6|)] L2 [after 'when' expression]: - merge(when (flag) { true -> return 1 false -> return 0 }|!, !) -> L1: 1 NEXT:[] PREV:[ret(*|) L1, ret(*|) L1] error: PREV:[] sink: PREV:[, ] =====================