== test == tailrec fun test() : Int { try { // do nothing } finally { test() } } --------------------- L0: 1 2 mark({ try { // do nothing } finally { test() } }) mark(try { // do nothing } finally { test() }) jmp?(L2) NEXT:[mark({ test() }), mark({ // do nothing })] 3 mark({ // do nothing }) read (Unit) 2 jmp?(L2) NEXT:[mark({ test() }), jmp(L3)] jmp(L3) NEXT:[mark({ test() })] L2 [onExceptionToFinallyBlock]: L4 [start finally]: 3 mark({ test() }) PREV:[jmp?(L2), jmp?(L2)] mark(test()) call(test(), test) -> L5 [finish finally]: 2 jmp(error) NEXT:[] L3 [skipFinallyToErrorBlock]: L6 [copy of L2, onExceptionToFinallyBlock]: 3 mark({ test() }) PREV:[jmp(L3)] mark(test()) call(test(), test) -> 2 merge(try { // do nothing } finally { test() }|!) -> L1: 1 NEXT:[] error: PREV:[jmp(error)] sink: PREV:[, ] =====================