== t1 == fun t1() { try { 1 } finally { 2 } } --------------------- l0: NEXT:[r(try { 1 } finally { 2 }) ] PREV:[] r(try { 1 } finally { 2 }) NEXT:[r(1)] PREV:[] r(1) NEXT:[r(2)] PREV:[r(try { 1 } finally { 2 }) ] l2: r(2) NEXT:[] PREV:[r(1)] l1: l3: NEXT:[] PREV:[r(2)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t2 == fun t2() { try { 1 if (2 > 3) { return } } finally { 2 } } --------------------- l0: NEXT:[r(try { 1 if (2 > 3) { retur..)] PREV:[] r(try { 1 if (2 > 3) { return } } finally { 2 }) NEXT:[r(1)] PREV:[] r(1) NEXT:[r(2)] PREV:[r(try { 1 if (2 > 3) { retur..)] r(2) NEXT:[r(3)] PREV:[r(1)] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l2)] PREV:[r(>)] jf(l2) NEXT:[read (Unit), r(2)] PREV:[r(2 > 3)] r(2) NEXT:[ret l1] PREV:[jf(l2)] ret l1 NEXT:[] PREV:[r(2)] - jmp(l3) NEXT:[r(2)] PREV:[] l2: read (Unit) NEXT:[r(2)] PREV:[jf(l2)] l3: l4: r(2) NEXT:[] PREV:[read (Unit)] l1: l5: NEXT:[] PREV:[ret l1, r(2)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t3 == fun t3() { try { 1 @{ () => if (2 > 3) { return@ } } } finally { 2 } } --------------------- l0: NEXT:[r(try { 1 @{ () => if (2 > 3..)] PREV:[] r(try { 1 @{ () => if (2 > 3) { return@ } } } finally { 2 }) NEXT:[r(1)] PREV:[] r(1) NEXT:[jmp?(l2)] PREV:[r(try { 1 @{ () => if (2 > 3..)] jmp?(l2) NEXT:[r({ () => if (2 > 3) { retur..), d({ () => if (2 > 3) { retur..)] PREV:[r(1)] d({ () => if (2 > 3) { return@ } }) NEXT:[] PREV:[jmp?(l2)] l2: r({ () => if (2 > 3) { return@ } }) NEXT:[r(2)] PREV:[jmp?(l2)] l7: r(2) NEXT:[] PREV:[r({ () => if (2 > 3) { retur..)] l1: l8: NEXT:[] PREV:[r(2)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, , d({ () => if (2 > 3) { retur..)] l3: NEXT:[r(())] PREV:[] r(()) NEXT:[r(2)] PREV:[] r(2) NEXT:[r(3)] PREV:[r(())] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l5)] PREV:[r(>)] jf(l5) NEXT:[read (Unit), ret l4] PREV:[r(2 > 3)] ret l4 NEXT:[] PREV:[jf(l5)] - jmp(l6) NEXT:[] PREV:[] l5: read (Unit) NEXT:[] PREV:[jf(l5)] l4: l6: NEXT:[] PREV:[ret l4, read (Unit)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == anonymous_0 == { () => if (2 > 3) { return@ } } --------------------- l3: NEXT:[r(())] PREV:[] r(()) NEXT:[r(2)] PREV:[] r(2) NEXT:[r(3)] PREV:[r(())] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l5)] PREV:[r(>)] jf(l5) NEXT:[read (Unit), ret l4] PREV:[r(2 > 3)] ret l4 NEXT:[] PREV:[jf(l5)] - jmp(l6) NEXT:[] PREV:[] l5: read (Unit) NEXT:[] PREV:[jf(l5)] l4: l6: NEXT:[] PREV:[ret l4, read (Unit)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t4 == fun t4() { @{ () => try { 1 if (2 > 3) { return@ } } finally { 2 } } } --------------------- l0: NEXT:[jmp?(l2)] PREV:[] jmp?(l2) NEXT:[r({ () => try { 1 if (2 > 3)..), d({ () => try { 1 if (2 > 3)..)] PREV:[] d({ () => try { 1 if (2 > 3) { return@ } } finally { 2 } }) NEXT:[] PREV:[jmp?(l2)] l2: r({ () => try { 1 if (2 > 3) { return@ } } finally { 2 } }) NEXT:[] PREV:[jmp?(l2)] l1: NEXT:[] PREV:[r({ () => try { 1 if (2 > 3)..)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, , d({ () => try { 1 if (2 > 3)..)] l3: NEXT:[r(())] PREV:[] r(()) NEXT:[r(try { 1 if (2 > 3) { retur..)] PREV:[] r(try { 1 if (2 > 3) { return@ } } finally { 2 }) NEXT:[r(1)] PREV:[r(())] r(1) NEXT:[r(2)] PREV:[r(try { 1 if (2 > 3) { retur..)] r(2) NEXT:[r(3)] PREV:[r(1)] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l5)] PREV:[r(>)] jf(l5) NEXT:[read (Unit), r(2)] PREV:[r(2 > 3)] r(2) NEXT:[ret l4] PREV:[jf(l5)] ret l4 NEXT:[] PREV:[r(2)] - jmp(l6) NEXT:[r(2)] PREV:[] l5: read (Unit) NEXT:[r(2)] PREV:[jf(l5)] l6: l7: r(2) NEXT:[] PREV:[read (Unit)] l4: l8: NEXT:[] PREV:[ret l4, r(2)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == anonymous_1 == { () => try { 1 if (2 > 3) { return@ } } finally { 2 } } --------------------- l3: NEXT:[r(())] PREV:[] r(()) NEXT:[r(try { 1 if (2 > 3) { retur..)] PREV:[] r(try { 1 if (2 > 3) { return@ } } finally { 2 }) NEXT:[r(1)] PREV:[r(())] r(1) NEXT:[r(2)] PREV:[r(try { 1 if (2 > 3) { retur..)] r(2) NEXT:[r(3)] PREV:[r(1)] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l5)] PREV:[r(>)] jf(l5) NEXT:[read (Unit), r(2)] PREV:[r(2 > 3)] r(2) NEXT:[ret l4] PREV:[jf(l5)] ret l4 NEXT:[] PREV:[r(2)] - jmp(l6) NEXT:[r(2)] PREV:[] l5: read (Unit) NEXT:[r(2)] PREV:[jf(l5)] l6: l7: r(2) NEXT:[] PREV:[read (Unit)] l4: l8: NEXT:[] PREV:[ret l4, r(2)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t5 == fun t5() { @ while(true) { try { 1 if (2 > 3) { break @ } } finally { 2 } } } --------------------- l0: NEXT:[r(while(true) { try { 1 if (..)] PREV:[] r(while(true) { try { 1 if (2 > 3) { break @ } } finally { 2 } }) NEXT:[r(true)] PREV:[] l2: l5: r(true) NEXT:[r(try { 1 if (2 > 3) { break..)] PREV:[r(while(true) { try { 1 if (..), jmp(l2)] l4: r(try { 1 if (2 > 3) { break @ } } finally { 2 }) NEXT:[r(1)] PREV:[r(true)] r(1) NEXT:[r(2)] PREV:[r(try { 1 if (2 > 3) { break..)] r(2) NEXT:[r(3)] PREV:[r(1)] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l6)] PREV:[r(>)] jf(l6) NEXT:[read (Unit), r(2)] PREV:[r(2 > 3)] r(2) NEXT:[jmp(l3)] PREV:[jf(l6)] jmp(l3) NEXT:[read (Unit)] PREV:[r(2)] - jmp(l7) NEXT:[r(2)] PREV:[] l6: read (Unit) NEXT:[r(2)] PREV:[jf(l6)] l7: l8: r(2) NEXT:[jmp(l2)] PREV:[read (Unit)] l9: jmp(l2) NEXT:[r(true)] PREV:[r(2)] l3: read (Unit) NEXT:[] PREV:[jmp(l3)] l1: NEXT:[] PREV:[read (Unit)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t6 == fun t6() { try { @ while(true) { 1 if (2 > 3) { break @ } } 5 } finally { 2 } } --------------------- l0: NEXT:[r(try { @ while(true) { 1 if..)] PREV:[] r(try { @ while(true) { 1 if (2 > 3) { break @ } } 5 } finally { 2 }) NEXT:[r(while(true) { 1 if (2 > 3)..)] PREV:[] r(while(true) { 1 if (2 > 3) { break @ } }) NEXT:[r(true)] PREV:[r(try { @ while(true) { 1 if..)] l2: l5: r(true) NEXT:[r(1)] PREV:[r(while(true) { 1 if (2 > 3)..), jmp(l2)] l4: r(1) NEXT:[r(2)] PREV:[r(true)] r(2) NEXT:[r(3)] PREV:[r(1)] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l6)] PREV:[r(>)] jf(l6) NEXT:[read (Unit), jmp(l3)] PREV:[r(2 > 3)] jmp(l3) NEXT:[read (Unit)] PREV:[jf(l6)] - jmp(l7) NEXT:[jmp(l2)] PREV:[] l6: read (Unit) NEXT:[jmp(l2)] PREV:[jf(l6)] l7: jmp(l2) NEXT:[r(true)] PREV:[read (Unit)] l3: read (Unit) NEXT:[r(5)] PREV:[jmp(l3)] r(5) NEXT:[r(2)] PREV:[read (Unit)] l8: r(2) NEXT:[] PREV:[r(5)] l1: l9: NEXT:[] PREV:[r(2)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t7 == fun t7() { try { @ while(true) { 1 if (2 > 3) { break @ } } } finally { 2 } } --------------------- l0: NEXT:[r(try { @ while(true) { 1 if..)] PREV:[] r(try { @ while(true) { 1 if (2 > 3) { break @ } } } finally { 2 }) NEXT:[r(while(true) { 1 if (2 > 3)..)] PREV:[] r(while(true) { 1 if (2 > 3) { break @ } }) NEXT:[r(true)] PREV:[r(try { @ while(true) { 1 if..)] l2: l5: r(true) NEXT:[r(1)] PREV:[r(while(true) { 1 if (2 > 3)..), jmp(l2)] l4: r(1) NEXT:[r(2)] PREV:[r(true)] r(2) NEXT:[r(3)] PREV:[r(1)] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l6)] PREV:[r(>)] jf(l6) NEXT:[read (Unit), jmp(l3)] PREV:[r(2 > 3)] jmp(l3) NEXT:[read (Unit)] PREV:[jf(l6)] - jmp(l7) NEXT:[jmp(l2)] PREV:[] l6: read (Unit) NEXT:[jmp(l2)] PREV:[jf(l6)] l7: jmp(l2) NEXT:[r(true)] PREV:[read (Unit)] l3: read (Unit) NEXT:[r(2)] PREV:[jmp(l3)] l8: r(2) NEXT:[] PREV:[read (Unit)] l1: l9: NEXT:[] PREV:[r(2)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t8 == fun t8(a : Int) { @ for (i in 1..a) { try { 1 if (2 > 3) { continue @ } } finally { 2 } } } --------------------- l0: NEXT:[v(a : Int)] PREV:[] v(a : Int) NEXT:[w(a)] PREV:[] w(a) NEXT:[r(for (i in 1..a) { try { 1 ..)] PREV:[v(a : Int)] r(for (i in 1..a) { try { 1 if (2 > 3) { continue @ } } finally { 2 } }) NEXT:[r(1)] PREV:[w(a)] r(1) NEXT:[r(a)] PREV:[r(for (i in 1..a) { try { 1 ..)] r(a) NEXT:[r(..)] PREV:[r(1)] r(..) NEXT:[r(1..a)] PREV:[r(a)] r(1..a) NEXT:[v(i)] PREV:[r(..)] v(i) NEXT:[w(i)] PREV:[r(1..a)] w(i) NEXT:[jmp?(l2)] PREV:[v(i)] l3: jmp?(l2) NEXT:[read (Unit), r(try { 1 if (2 > 3) { conti..)] PREV:[w(i)] l4: l5: r(try { 1 if (2 > 3) { continue @ } } finally { 2 }) NEXT:[r(1)] PREV:[jmp?(l2), jmp(l4), jmp?(l4)] r(1) NEXT:[r(2)] PREV:[r(try { 1 if (2 > 3) { conti..)] r(2) NEXT:[r(3)] PREV:[r(1)] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l6)] PREV:[r(>)] jf(l6) NEXT:[read (Unit), r(2)] PREV:[r(2 > 3)] r(2) NEXT:[jmp(l4)] PREV:[jf(l6)] jmp(l4) NEXT:[r(try { 1 if (2 > 3) { conti..)] PREV:[r(2)] - jmp(l7) NEXT:[r(2)] PREV:[] l6: read (Unit) NEXT:[r(2)] PREV:[jf(l6)] l7: l8: r(2) NEXT:[jmp?(l4)] PREV:[read (Unit)] l9: jmp?(l4) NEXT:[r(try { 1 if (2 > 3) { conti..), read (Unit)] PREV:[r(2)] l2: read (Unit) NEXT:[] PREV:[jmp?(l2), jmp?(l4)] l1: NEXT:[] PREV:[read (Unit)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t9 == fun t9(a : Int) { try { @ for (i in 1..a) { 1 if (2 > 3) { continue @ } } 5 } finally { 2 } } --------------------- l0: NEXT:[v(a : Int)] PREV:[] v(a : Int) NEXT:[w(a)] PREV:[] w(a) NEXT:[r(try { @ for (i in 1..a) { ..)] PREV:[v(a : Int)] r(try { @ for (i in 1..a) { 1 if (2 > 3) { continue @ } } 5 } finally { 2 }) NEXT:[r(for (i in 1..a) { 1 if (2 ..)] PREV:[w(a)] r(for (i in 1..a) { 1 if (2 > 3) { continue @ } }) NEXT:[r(1)] PREV:[r(try { @ for (i in 1..a) { ..)] r(1) NEXT:[r(a)] PREV:[r(for (i in 1..a) { 1 if (2 ..)] r(a) NEXT:[r(..)] PREV:[r(1)] r(..) NEXT:[r(1..a)] PREV:[r(a)] r(1..a) NEXT:[v(i)] PREV:[r(..)] v(i) NEXT:[w(i)] PREV:[r(1..a)] w(i) NEXT:[jmp?(l2)] PREV:[v(i)] l3: jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)] l4: l5: r(1) NEXT:[r(2)] PREV:[jmp?(l2), jmp(l4), jmp?(l4)] r(2) NEXT:[r(3)] PREV:[r(1)] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l6)] PREV:[r(>)] jf(l6) NEXT:[read (Unit), jmp(l4)] PREV:[r(2 > 3)] jmp(l4) NEXT:[r(1)] PREV:[jf(l6)] - jmp(l7) NEXT:[jmp?(l4)] PREV:[] l6: read (Unit) NEXT:[jmp?(l4)] PREV:[jf(l6)] l7: jmp?(l4) NEXT:[r(1), read (Unit)] PREV:[read (Unit)] l2: read (Unit) NEXT:[r(5)] PREV:[jmp?(l2), jmp?(l4)] r(5) NEXT:[r(2)] PREV:[read (Unit)] l8: r(2) NEXT:[] PREV:[r(5)] l1: l9: NEXT:[] PREV:[r(2)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t10 == fun t10(a : Int) { try { @ for (i in 1..a) { 1 if (2 > 3) { continue @ } } } finally { 2 } } --------------------- l0: NEXT:[v(a : Int)] PREV:[] v(a : Int) NEXT:[w(a)] PREV:[] w(a) NEXT:[r(try { @ for (i in 1..a) { ..)] PREV:[v(a : Int)] r(try { @ for (i in 1..a) { 1 if (2 > 3) { continue @ } } } finally { 2 }) NEXT:[r(for (i in 1..a) { 1 if (2 ..)] PREV:[w(a)] r(for (i in 1..a) { 1 if (2 > 3) { continue @ } }) NEXT:[r(1)] PREV:[r(try { @ for (i in 1..a) { ..)] r(1) NEXT:[r(a)] PREV:[r(for (i in 1..a) { 1 if (2 ..)] r(a) NEXT:[r(..)] PREV:[r(1)] r(..) NEXT:[r(1..a)] PREV:[r(a)] r(1..a) NEXT:[v(i)] PREV:[r(..)] v(i) NEXT:[w(i)] PREV:[r(1..a)] w(i) NEXT:[jmp?(l2)] PREV:[v(i)] l3: jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)] l4: l5: r(1) NEXT:[r(2)] PREV:[jmp?(l2), jmp(l4), jmp?(l4)] r(2) NEXT:[r(3)] PREV:[r(1)] r(3) NEXT:[r(>)] PREV:[r(2)] r(>) NEXT:[r(2 > 3)] PREV:[r(3)] r(2 > 3) NEXT:[jf(l6)] PREV:[r(>)] jf(l6) NEXT:[read (Unit), jmp(l4)] PREV:[r(2 > 3)] jmp(l4) NEXT:[r(1)] PREV:[jf(l6)] - jmp(l7) NEXT:[jmp?(l4)] PREV:[] l6: read (Unit) NEXT:[jmp?(l4)] PREV:[jf(l6)] l7: jmp?(l4) NEXT:[r(1), read (Unit)] PREV:[read (Unit)] l2: read (Unit) NEXT:[r(2)] PREV:[jmp?(l2), jmp?(l4)] l8: r(2) NEXT:[] PREV:[read (Unit)] l1: l9: NEXT:[] PREV:[r(2)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t11 == fun t11() { try { return 1 } finally { return 2 } } --------------------- l0: NEXT:[r(try { return 1 } finally {..)] PREV:[] r(try { return 1 } finally { return 2 }) NEXT:[r(1)] PREV:[] r(1) NEXT:[r(2)] PREV:[r(try { return 1 } finally {..)] r(2) NEXT:[ret(*) l1] PREV:[r(1)] ret(*) l1 NEXT:[] PREV:[r(2)] - ret(*) l1 NEXT:[] PREV:[] l2: - r(2) NEXT:[ret(*) l1] PREV:[] - ret(*) l1 NEXT:[] PREV:[] l1: l3: NEXT:[] PREV:[ret(*) l1] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t12 == fun t12() : Int { try { return 1 } finally { doSmth(3) } } --------------------- l0: NEXT:[r(try { return 1 } finally {..)] PREV:[] r(try { return 1 } finally { doSmth(3) }) NEXT:[r(1)] PREV:[] r(1) NEXT:[r(3)] PREV:[r(try { return 1 } finally {..)] r(3) NEXT:[r(doSmth)] PREV:[r(1)] r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)] ret(*) l1 NEXT:[] PREV:[r(doSmth(3))] l2: - r(3) NEXT:[r(doSmth)] PREV:[] - r(doSmth) NEXT:[r(doSmth(3))] PREV:[] - r(doSmth(3)) NEXT:[] PREV:[] l1: l3: NEXT:[] PREV:[ret(*) l1] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t13 == fun t13() : Int { try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } } --------------------- l0: NEXT:[r(try { return 1 } catch (e:..)] PREV:[] r(try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) }) NEXT:[jmp?(l2)] PREV:[] jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[r(try { return 1 } catch (e:..)] r(1) NEXT:[r(3)] PREV:[jmp?(l2)] r(3) NEXT:[r(doSmth)] PREV:[r(1)] r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)] ret(*) l1 NEXT:[] PREV:[r(doSmth(3))] l3: - jmp(l4) NEXT:[r(3)] PREV:[] l2: jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)] v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()] w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)] r(2) NEXT:[r(doSmth)] PREV:[w(e)] r(doSmth) NEXT:[r(doSmth(2))] PREV:[r(2)] r(doSmth(2)) NEXT:[jmp(l4)] PREV:[r(doSmth)] l5: jmp(l4) NEXT:[r(3)] PREV:[r(doSmth(2))] l4: r(3) NEXT:[r(doSmth)] PREV:[jmp(l4)] r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] r(doSmth(3)) NEXT:[] PREV:[r(doSmth)] l1: l6: NEXT:[] PREV:[ret(*) l1, r(doSmth(3))] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t14 == fun t14() : Int { try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } } --------------------- l0: NEXT:[r(try { return 1 } catch (e:..)] PREV:[] r(try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) }) NEXT:[jmp?(l2)] PREV:[] jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[r(try { return 1 } catch (e:..)] r(1) NEXT:[ret(*) l1] PREV:[jmp?(l2)] ret(*) l1 NEXT:[] PREV:[r(1)] l3: - jmp(l4) NEXT:[] PREV:[] l2: jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)] v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()] w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)] r(2) NEXT:[r(doSmth)] PREV:[w(e)] r(doSmth) NEXT:[r(doSmth(2))] PREV:[r(2)] r(doSmth(2)) NEXT:[jmp(l4)] PREV:[r(doSmth)] l5: jmp(l4) NEXT:[] PREV:[r(doSmth(2))] l1: l4: l6: NEXT:[] PREV:[ret(*) l1, jmp(l4)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t15 == fun t15() : Int { try { return 1 } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } } --------------------- l0: NEXT:[r(try { return 1 } catch (e:..)] PREV:[] r(try { return 1 } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) }) NEXT:[jmp?(l2)] PREV:[] jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[r(try { return 1 } catch (e:..)] r(1) NEXT:[r(3)] PREV:[jmp?(l2)] r(3) NEXT:[r(doSmth)] PREV:[r(1)] r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)] ret(*) l1 NEXT:[] PREV:[r(doSmth(3))] l3: - jmp(l4) NEXT:[r(3)] PREV:[] l2: jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)] v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()] w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)] r(2) NEXT:[r(3)] PREV:[w(e)] r(3) NEXT:[r(doSmth)] PREV:[r(2)] r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)] ret(*) l1 NEXT:[] PREV:[r(doSmth(3))] l5: - jmp(l4) NEXT:[r(3)] PREV:[] l4: - r(3) NEXT:[r(doSmth)] PREV:[] - r(doSmth) NEXT:[r(doSmth(3))] PREV:[] - r(doSmth(3)) NEXT:[] PREV:[] l1: l6: NEXT:[] PREV:[ret(*) l1, ret(*) l1] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == t16 == fun t16() : Int { try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } } --------------------- l0: NEXT:[r(try { doSmth(1) } catch (e..)] PREV:[] r(try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) }) NEXT:[jmp?(l2)] PREV:[] jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[r(try { doSmth(1) } catch (e..)] r(1) NEXT:[r(doSmth)] PREV:[jmp?(l2)] r(doSmth) NEXT:[r(doSmth(1))] PREV:[r(1)] r(doSmth(1)) NEXT:[jmp(l4)] PREV:[r(doSmth)] l3: jmp(l4) NEXT:[r(3)] PREV:[r(doSmth(1))] l2: jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)] v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()] w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)] r(2) NEXT:[r(3)] PREV:[w(e)] r(3) NEXT:[r(doSmth)] PREV:[r(2)] r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)] ret(*) l1 NEXT:[] PREV:[r(doSmth(3))] l5: - jmp(l4) NEXT:[r(3)] PREV:[] l4: r(3) NEXT:[r(doSmth)] PREV:[jmp(l4)] r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] r(doSmth(3)) NEXT:[] PREV:[r(doSmth)] l1: l6: NEXT:[] PREV:[ret(*) l1, r(doSmth(3))] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] ===================== == doSmth == fun doSmth(i: Int) { } --------------------- l0: NEXT:[v(i: Int)] PREV:[] v(i: Int) NEXT:[w(i)] PREV:[] w(i) NEXT:[read (Unit)] PREV:[v(i: Int)] read (Unit) NEXT:[] PREV:[w(i)] l1: NEXT:[] PREV:[read (Unit)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[, ] =====================