From f0dea9aee4c9019755ec9825704d57ca48a1053b Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Mon, 10 Dec 2012 17:08:44 +0400 Subject: [PATCH] updated test data for try-finally --- compiler/testData/cfg/Finally.instructions | 1161 +++++++++++--------- 1 file changed, 633 insertions(+), 528 deletions(-) diff --git a/compiler/testData/cfg/Finally.instructions b/compiler/testData/cfg/Finally.instructions index 0f49c8ecfc4..03041f2cb16 100644 --- a/compiler/testData/cfg/Finally.instructions +++ b/compiler/testData/cfg/Finally.instructions @@ -8,22 +8,28 @@ fun t1() { } --------------------- 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)] + NEXT:[r(try { 1 } finally { 2 }) ] PREV:[] + r(try { + 1 + } finally { + 2 + }) NEXT:[jmp?(l2 [onExceptionToFinallyBlock])] PREV:[] + jmp?(l2 [onExceptionToFinallyBlock]) NEXT:[r(2), r(1)] PREV:[r(try { 1 } finally { 2 }) ] + r(1) NEXT:[jmp(l3 [skipFinallyToErrorBlock])] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] +d0: + jmp(l3 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[r(1)] +l2 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l3 [skipFinallyToErrorBlock]: + r(2) NEXT:[] PREV:[jmp(l3 [skipFinallyToErrorBlock])] l1: -l3: - NEXT:[] PREV:[r(2)] +l4 [stop [d0]]: + NEXT:[] PREV:[r(2)] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t2 == fun t2() { @@ -38,36 +44,42 @@ fun t2() { } --------------------- 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)] + NEXT:[r(try { 1 if (2 > 3) { retur..)] PREV:[] + r(try { + 1 + if (2 > 3) { + return + } + } finally { + 2 + }) NEXT:[jmp?(l2 [onExceptionToFinallyBlock])] PREV:[] + jmp?(l2 [onExceptionToFinallyBlock]) NEXT:[r(2), r(1)] PREV:[r(try { 1 if (2 > 3) { retur..)] + r(1) NEXT:[r(2)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + 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(l3)] PREV:[r(>)] + jf(l3) NEXT:[read (Unit), r(2)] PREV:[r(2 > 3)] + r(2) NEXT:[ret l1] PREV:[jf(l3)] + ret l1 NEXT:[] PREV:[r(2)] +- jmp(l4) NEXT:[jmp(l5 [skipFinallyToErrorBlock])] PREV:[] l3: + read (Unit) NEXT:[jmp(l5 [skipFinallyToErrorBlock])] PREV:[jf(l3)] l4: - r(2) NEXT:[] PREV:[read (Unit)] +d0: + jmp(l5 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[read (Unit)] +l2 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l5 [skipFinallyToErrorBlock]: + r(2) NEXT:[] PREV:[jmp(l5 [skipFinallyToErrorBlock])] l1: -l5: - NEXT:[] PREV:[ret l1, r(2)] +l6 [stop [d0]]: + NEXT:[] PREV:[ret l1, r(2)] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t3 == fun t3() { @@ -84,54 +96,60 @@ fun t3() { } --------------------- 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..)] + NEXT:[r(try { 1 @{ () => if (2 > 3..)] PREV:[] + r(try { + 1 + @{ () => + if (2 > 3) { + return@ + } + } + } finally { + 2 + }) NEXT:[jmp?(l2 [onExceptionToFinallyBlock])] PREV:[] + jmp?(l2 [onExceptionToFinallyBlock]) NEXT:[r(2), r(1)] PREV:[r(try { 1 @{ () => if (2 > 3..)] + r(1) NEXT:[jmp?(l3)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + jmp?(l3) NEXT:[r({ () => if (2 > 3) { retur..), d({ () => if (2 > 3) { retur..)] PREV:[r(1)] + d({ () => + if (2 > 3) { + return@ + } + }) NEXT:[] PREV:[jmp?(l3)] l3: + r({ () => + if (2 > 3) { + return@ + } + }) NEXT:[jmp(l8 [skipFinallyToErrorBlock])] PREV:[jmp?(l3)] +d0: + jmp(l8 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[r({ () => if (2 > 3) { retur..)] +l2 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l8 [skipFinallyToErrorBlock]: + r(2) NEXT:[] PREV:[jmp(l8 [skipFinallyToErrorBlock])] +l1: +l9 [stop [d0]]: + NEXT:[] PREV:[r(2)] +error: + NEXT:[] PREV:[jmp(error)] +sink: + NEXT:[] PREV:[, , d({ () => if (2 > 3) { retur..)] +l4: 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: + r(2 > 3) NEXT:[jf(l6)] PREV:[r(>)] + jf(l6) NEXT:[read (Unit), ret l5] PREV:[r(2 > 3)] + ret l5 NEXT:[] PREV:[jf(l6)] +- jmp(l7) NEXT:[] PREV:[] l6: - NEXT:[] PREV:[ret l4, read (Unit)] + read (Unit) NEXT:[] PREV:[jf(l6)] +l5: +l7: + NEXT:[] PREV:[ret l5, read (Unit)] error: NEXT:[] PREV:[] sink: @@ -144,21 +162,21 @@ sink: } } --------------------- -l3: +l4: 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: + r(2 > 3) NEXT:[jf(l6)] PREV:[r(>)] + jf(l6) NEXT:[read (Unit), ret l5] PREV:[r(2 > 3)] + ret l5 NEXT:[] PREV:[jf(l6)] +- jmp(l7) NEXT:[] PREV:[] l6: - NEXT:[] PREV:[ret l4, read (Unit)] + read (Unit) NEXT:[] PREV:[jf(l6)] +l5: +l7: + NEXT:[] PREV:[ret l5, read (Unit)] error: NEXT:[] PREV:[] sink: @@ -209,37 +227,43 @@ error: 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)] + NEXT:[r(())] PREV:[] + r(()) NEXT:[r(try { 1 if (2 > 3) { retur..)] PREV:[] + r(try { + 1 + if (2 > 3) { + return@ + } + } finally { + 2 + }) NEXT:[jmp?(l5 [onExceptionToFinallyBlock])] PREV:[r(())] + jmp?(l5 [onExceptionToFinallyBlock]) NEXT:[r(2), r(1)] PREV:[r(try { 1 if (2 > 3) { retur..)] + r(1) NEXT:[r(2)] PREV:[jmp?(l5 [onExceptionToFinallyBlock])] + 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:[ret l4] PREV:[jf(l6)] + ret l4 NEXT:[] PREV:[r(2)] +- jmp(l7) NEXT:[jmp(l8 [skipFinallyToErrorBlock])] PREV:[] l6: + read (Unit) NEXT:[jmp(l8 [skipFinallyToErrorBlock])] PREV:[jf(l6)] l7: - r(2) NEXT:[] PREV:[read (Unit)] +d0: + jmp(l8 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[read (Unit)] +l5 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l5 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l8 [skipFinallyToErrorBlock]: + r(2) NEXT:[] PREV:[jmp(l8 [skipFinallyToErrorBlock])] l4: -l8: - NEXT:[] PREV:[ret l4, r(2)] +l9 [stop [d0]]: + NEXT:[] PREV:[ret l4, r(2)] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == anonymous_1 == { () => @@ -254,37 +278,43 @@ sink: } --------------------- 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)] + NEXT:[r(())] PREV:[] + r(()) NEXT:[r(try { 1 if (2 > 3) { retur..)] PREV:[] + r(try { + 1 + if (2 > 3) { + return@ + } + } finally { + 2 + }) NEXT:[jmp?(l5 [onExceptionToFinallyBlock])] PREV:[r(())] + jmp?(l5 [onExceptionToFinallyBlock]) NEXT:[r(2), r(1)] PREV:[r(try { 1 if (2 > 3) { retur..)] + r(1) NEXT:[r(2)] PREV:[jmp?(l5 [onExceptionToFinallyBlock])] + 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:[ret l4] PREV:[jf(l6)] + ret l4 NEXT:[] PREV:[r(2)] +- jmp(l7) NEXT:[jmp(l8 [skipFinallyToErrorBlock])] PREV:[] l6: + read (Unit) NEXT:[jmp(l8 [skipFinallyToErrorBlock])] PREV:[jf(l6)] l7: - r(2) NEXT:[] PREV:[read (Unit)] +d0: + jmp(l8 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[read (Unit)] +l5 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l5 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l8 [skipFinallyToErrorBlock]: + r(2) NEXT:[] PREV:[jmp(l8 [skipFinallyToErrorBlock])] l4: -l8: - NEXT:[] PREV:[ret l4, r(2)] +l9 [stop [d0]]: + NEXT:[] PREV:[ret l4, r(2)] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t5 == fun t5() { @@ -301,53 +331,59 @@ fun t5() { } --------------------- l0: - NEXT:[r(while(true) { try { 1 if (..)] PREV:[] - r(while(true) { - try { - 1 - if (2 > 3) { - break @ - } - } finally { - 2 - } - }) NEXT:[r(true)] PREV:[] + 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)] + 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)] + r(try { + 1 + if (2 > 3) { + break @ + } + } finally { + 2 + }) NEXT:[jmp?(l6 [onExceptionToFinallyBlock])] PREV:[r(true)] + jmp?(l6 [onExceptionToFinallyBlock]) NEXT:[r(2), r(1)] PREV:[r(try { 1 if (2 > 3) { break..)] + r(1) NEXT:[r(2)] PREV:[jmp?(l6 [onExceptionToFinallyBlock])] + 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(l7)] PREV:[r(>)] + jf(l7) NEXT:[read (Unit), r(2)] PREV:[r(2 > 3)] + r(2) NEXT:[jmp(l3)] PREV:[jf(l7)] + jmp(l3) NEXT:[read (Unit)] PREV:[r(2)] +- jmp(l8) NEXT:[jmp(l9 [skipFinallyToErrorBlock])] PREV:[] l7: + read (Unit) NEXT:[jmp(l9 [skipFinallyToErrorBlock])] PREV:[jf(l7)] l8: - r(2) NEXT:[jmp(l2)] PREV:[read (Unit)] -l9: - jmp(l2) NEXT:[r(true)] PREV:[r(2)] +d0: + jmp(l9 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[read (Unit)] +l6 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l6 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l9 [skipFinallyToErrorBlock]: + r(2) NEXT:[jmp(l2)] PREV:[jmp(l9 [skipFinallyToErrorBlock])] +l10 [stop [d0]]: + jmp(l2) NEXT:[r(true)] PREV:[r(2)] l3: - read (Unit) NEXT:[] PREV:[jmp(l3)] + read (Unit) NEXT:[] PREV:[jmp(l3)] l1: - NEXT:[] PREV:[read (Unit)] + NEXT:[] PREV:[read (Unit)] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t6 == fun t6() { @@ -365,52 +401,58 @@ fun t6() { } --------------------- 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)] + NEXT:[r(try { @ while(true) { 1 if..)] PREV:[] + r(try { + @ while(true) { + 1 + if (2 > 3) { + break @ + } + } + 5 + } finally { + 2 + }) NEXT:[jmp?(l2 [onExceptionToFinallyBlock])] PREV:[] + jmp?(l2 [onExceptionToFinallyBlock]) NEXT:[r(2), r(while(true) { 1 if (2 > 3)..)] PREV:[r(try { @ while(true) { 1 if..)] + r(while(true) { + 1 + if (2 > 3) { + break @ + } + }) NEXT:[r(true)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] l3: - read (Unit) NEXT:[r(5)] PREV:[jmp(l3)] - r(5) NEXT:[r(2)] PREV:[read (Unit)] +l6: + r(true) NEXT:[r(1)] PREV:[r(while(true) { 1 if (2 > 3)..), jmp(l3)] +l5: + 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(l7)] PREV:[r(>)] + jf(l7) NEXT:[read (Unit), jmp(l4)] PREV:[r(2 > 3)] + jmp(l4) NEXT:[read (Unit)] PREV:[jf(l7)] +- jmp(l8) NEXT:[jmp(l3)] PREV:[] +l7: + read (Unit) NEXT:[jmp(l3)] PREV:[jf(l7)] l8: - r(2) NEXT:[] PREV:[r(5)] + jmp(l3) NEXT:[r(true)] PREV:[read (Unit)] +l4: + read (Unit) NEXT:[r(5)] PREV:[jmp(l4)] + r(5) NEXT:[jmp(l9 [skipFinallyToErrorBlock])] PREV:[read (Unit)] +d0: + jmp(l9 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[r(5)] +l2 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l9 [skipFinallyToErrorBlock]: + r(2) NEXT:[] PREV:[jmp(l9 [skipFinallyToErrorBlock])] l1: -l9: - NEXT:[] PREV:[r(2)] +l10 [stop [d0]]: + NEXT:[] PREV:[r(2)] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t7 == fun t7() { @@ -427,50 +469,56 @@ fun t7() { } --------------------- 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)] + NEXT:[r(try { @ while(true) { 1 if..)] PREV:[] + r(try { + @ while(true) { + 1 + if (2 > 3) { + break @ + } + } + } finally { + 2 + }) NEXT:[jmp?(l2 [onExceptionToFinallyBlock])] PREV:[] + jmp?(l2 [onExceptionToFinallyBlock]) NEXT:[r(2), r(while(true) { 1 if (2 > 3)..)] PREV:[r(try { @ while(true) { 1 if..)] + r(while(true) { + 1 + if (2 > 3) { + break @ + } + }) NEXT:[r(true)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] l3: - read (Unit) NEXT:[r(2)] PREV:[jmp(l3)] +l6: + r(true) NEXT:[r(1)] PREV:[r(while(true) { 1 if (2 > 3)..), jmp(l3)] +l5: + 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(l7)] PREV:[r(>)] + jf(l7) NEXT:[read (Unit), jmp(l4)] PREV:[r(2 > 3)] + jmp(l4) NEXT:[read (Unit)] PREV:[jf(l7)] +- jmp(l8) NEXT:[jmp(l3)] PREV:[] +l7: + read (Unit) NEXT:[jmp(l3)] PREV:[jf(l7)] l8: - r(2) NEXT:[] PREV:[read (Unit)] + jmp(l3) NEXT:[r(true)] PREV:[read (Unit)] +l4: + read (Unit) NEXT:[jmp(l9 [skipFinallyToErrorBlock])] PREV:[jmp(l4)] +d0: + jmp(l9 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[read (Unit)] +l2 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l9 [skipFinallyToErrorBlock]: + r(2) NEXT:[] PREV:[jmp(l9 [skipFinallyToErrorBlock])] l1: -l9: - NEXT:[] PREV:[r(2)] +l10 [stop [d0]]: + NEXT:[] PREV:[r(2)] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t8 == fun t8(a : Int) { @@ -487,61 +535,67 @@ fun t8(a : Int) { } --------------------- 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)] + 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)] + 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)] + r(try { + 1 + if (2 > 3) { + continue @ + } + } finally { + 2 + }) NEXT:[jmp?(l6 [onExceptionToFinallyBlock])] PREV:[jmp?(l2), jmp(l4), jmp?(l4)] + jmp?(l6 [onExceptionToFinallyBlock]) NEXT:[r(2), r(1)] PREV:[r(try { 1 if (2 > 3) { conti..)] + r(1) NEXT:[r(2)] PREV:[jmp?(l6 [onExceptionToFinallyBlock])] + 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(l7)] PREV:[r(>)] + jf(l7) NEXT:[read (Unit), r(2)] PREV:[r(2 > 3)] + r(2) NEXT:[jmp(l4)] PREV:[jf(l7)] + jmp(l4) NEXT:[r(try { 1 if (2 > 3) { conti..)] PREV:[r(2)] +- jmp(l8) NEXT:[jmp(l9 [skipFinallyToErrorBlock])] PREV:[] l7: + read (Unit) NEXT:[jmp(l9 [skipFinallyToErrorBlock])] PREV:[jf(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)] +d0: + jmp(l9 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[read (Unit)] +l6 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l6 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l9 [skipFinallyToErrorBlock]: + r(2) NEXT:[jmp?(l4)] PREV:[jmp(l9 [skipFinallyToErrorBlock])] +l10 [stop [d0]]: + jmp?(l4) NEXT:[r(try { 1 if (2 > 3) { conti..), read (Unit)] PREV:[r(2)] l2: - read (Unit) NEXT:[] PREV:[jmp?(l2), jmp?(l4)] + read (Unit) NEXT:[] PREV:[jmp?(l2), jmp?(l4)] l1: - NEXT:[] PREV:[read (Unit)] + NEXT:[] PREV:[read (Unit)] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t9 == fun t9(a : Int) { @@ -559,60 +613,66 @@ fun t9(a : Int) { } --------------------- 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)] + 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:[jmp?(l2 [onExceptionToFinallyBlock])] PREV:[w(a)] + jmp?(l2 [onExceptionToFinallyBlock]) NEXT:[r(2), r(for (i in 1..a) { 1 if (2 ..)] PREV:[r(try { @ for (i in 1..a) { ..)] + r(for (i in 1..a) { + 1 + if (2 > 3) { + continue @ + } + }) NEXT:[r(1)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + 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?(l3)] PREV:[v(i)] l4: + jmp?(l3) NEXT:[read (Unit), r(1)] PREV:[w(i)] 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)] + r(1) NEXT:[r(2)] PREV:[jmp?(l3), jmp(l5), jmp?(l5)] + 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(l7)] PREV:[r(>)] + jf(l7) NEXT:[read (Unit), jmp(l5)] PREV:[r(2 > 3)] + jmp(l5) NEXT:[r(1)] PREV:[jf(l7)] +- jmp(l8) NEXT:[jmp?(l5)] PREV:[] 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)] + read (Unit) NEXT:[jmp?(l5)] PREV:[jf(l7)] l8: - r(2) NEXT:[] PREV:[r(5)] + jmp?(l5) NEXT:[r(1), read (Unit)] PREV:[read (Unit)] +l3: + read (Unit) NEXT:[r(5)] PREV:[jmp?(l3), jmp?(l5)] + r(5) NEXT:[jmp(l9 [skipFinallyToErrorBlock])] PREV:[read (Unit)] +d0: + jmp(l9 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[r(5)] +l2 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l9 [skipFinallyToErrorBlock]: + r(2) NEXT:[] PREV:[jmp(l9 [skipFinallyToErrorBlock])] l1: -l9: - NEXT:[] PREV:[r(2)] +l10 [stop [d0]]: + NEXT:[] PREV:[r(2)] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t10 == fun t10(a : Int) { @@ -629,58 +689,64 @@ fun t10(a : Int) { } --------------------- 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)] + 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:[jmp?(l2 [onExceptionToFinallyBlock])] PREV:[w(a)] + jmp?(l2 [onExceptionToFinallyBlock]) NEXT:[r(2), r(for (i in 1..a) { 1 if (2 ..)] PREV:[r(try { @ for (i in 1..a) { ..)] + r(for (i in 1..a) { + 1 + if (2 > 3) { + continue @ + } + }) NEXT:[r(1)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + 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?(l3)] PREV:[v(i)] l4: + jmp?(l3) NEXT:[read (Unit), r(1)] PREV:[w(i)] 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)] + r(1) NEXT:[r(2)] PREV:[jmp?(l3), jmp(l5), jmp?(l5)] + 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(l7)] PREV:[r(>)] + jf(l7) NEXT:[read (Unit), jmp(l5)] PREV:[r(2 > 3)] + jmp(l5) NEXT:[r(1)] PREV:[jf(l7)] +- jmp(l8) NEXT:[jmp?(l5)] PREV:[] l7: - jmp?(l4) NEXT:[r(1), read (Unit)] PREV:[read (Unit)] -l2: - read (Unit) NEXT:[r(2)] PREV:[jmp?(l2), jmp?(l4)] + read (Unit) NEXT:[jmp?(l5)] PREV:[jf(l7)] l8: - r(2) NEXT:[] PREV:[read (Unit)] + jmp?(l5) NEXT:[r(1), read (Unit)] PREV:[read (Unit)] +l3: + read (Unit) NEXT:[jmp(l9 [skipFinallyToErrorBlock])] PREV:[jmp?(l3), jmp?(l5)] +d0: + jmp(l9 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[read (Unit)] +l2 [onExceptionToFinallyBlock]: + r(2) NEXT:[jmp(error)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + jmp(error) NEXT:[] PREV:[r(2)] +l9 [skipFinallyToErrorBlock]: + r(2) NEXT:[] PREV:[jmp(l9 [skipFinallyToErrorBlock])] l1: -l9: - NEXT:[] PREV:[r(2)] +l10 [stop [d0]]: + NEXT:[] PREV:[r(2)] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t11 == fun t11() { @@ -693,27 +759,34 @@ fun t11() { } --------------------- 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:[] + NEXT:[r(try { return 1 } finally {..)] PREV:[] + r(try { + return 1 + } + finally { + return 2 + }) NEXT:[jmp?(l2 [onExceptionToFinallyBlock])] PREV:[] + jmp?(l2 [onExceptionToFinallyBlock]) NEXT:[r(2), r(1)] PREV:[r(try { return 1 } finally {..)] + r(1) NEXT:[r(2)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + r(2) NEXT:[ret(*) l1] PREV:[r(1)] + ret(*) l1 NEXT:[] PREV:[r(2)] +- ret(*) l1 NEXT:[] PREV:[] +d0: +- jmp(l3 [skipFinallyToErrorBlock]) NEXT:[r(2)] PREV:[] +l2 [onExceptionToFinallyBlock]: + r(2) NEXT:[ret(*) l1] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + ret(*) l1 NEXT:[] PREV:[r(2)] +- jmp(error) NEXT:[] PREV:[] +l3 [skipFinallyToErrorBlock]: +- r(2) NEXT:[ret(*) l1] PREV:[] +- ret(*) l1 NEXT:[] PREV:[] l1: -l3: - NEXT:[] PREV:[ret(*) l1] +l4 [stop [d0]]: + NEXT:[] PREV:[ret(*) l1, ret(*) l1] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t12 == fun t12() : Int { @@ -726,29 +799,37 @@ fun t12() : Int { } --------------------- 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:[] + NEXT:[r(try { return 1 } finally {..)] PREV:[] + r(try { + return 1 + } + finally { + doSmth(3) + }) NEXT:[jmp?(l2 [onExceptionToFinallyBlock])] PREV:[] + jmp?(l2 [onExceptionToFinallyBlock]) NEXT:[r(3), r(1)] PREV:[r(try { return 1 } finally {..)] + r(1) NEXT:[r(3)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + 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))] +d0: +- jmp(l3 [skipFinallyToErrorBlock]) NEXT:[r(3)] PREV:[] +l2 [onExceptionToFinallyBlock]: + r(3) NEXT:[r(doSmth)] PREV:[jmp?(l2 [onExceptionToFinallyBlock])] + r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] + r(doSmth(3)) NEXT:[jmp(error)] PREV:[r(doSmth)] + jmp(error) NEXT:[] PREV:[r(doSmth(3))] +l3 [skipFinallyToErrorBlock]: +- r(3) NEXT:[r(doSmth)] PREV:[] +- r(doSmth) NEXT:[r(doSmth(3))] PREV:[] +- r(doSmth(3)) NEXT:[] PREV:[] l1: -l3: - NEXT:[] PREV:[ret(*) l1] +l4 [stop [d0]]: + NEXT:[] PREV:[ret(*) l1] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t13 == fun t13() : Int { @@ -764,7 +845,7 @@ fun t13() : Int { } --------------------- l0: - NEXT:[r(try { return 1 } catch (e:..)] PREV:[] + NEXT:[r(try { return 1 } catch (e:..)] PREV:[] r(try { return 1 } @@ -773,35 +854,43 @@ l0: } 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)] + }) NEXT:[jmp?(l2 [onException])] PREV:[] + jmp?(l2 [onException]) NEXT:[jmp?(), jmp?(l3 [onExceptionToFinallyBlock])] PREV:[r(try { return 1 } catch (e:..)] + jmp?(l3 [onExceptionToFinallyBlock]) NEXT:[r(3), r(1)] PREV:[jmp?(l2 [onException])] + r(1) NEXT:[r(3)] PREV:[jmp?(l3 [onExceptionToFinallyBlock])] + 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))] +d0: +- jmp(l4 [afterCatches]) NEXT:[jmp(l5 [skipFinallyToErrorBlock])] PREV:[] +l2 [onException]: + jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2 [onException])] + 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 [afterCatches])] PREV:[r(doSmth)] +d1: + jmp(l4 [afterCatches]) NEXT:[jmp(l5 [skipFinallyToErrorBlock])] PREV:[r(doSmth(2))] +l4 [afterCatches]: + jmp(l5 [skipFinallyToErrorBlock]) NEXT:[r(3)] PREV:[jmp(l4 [afterCatches])] +l3 [onExceptionToFinallyBlock]: + r(3) NEXT:[r(doSmth)] PREV:[jmp?(l3 [onExceptionToFinallyBlock])] + r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] + r(doSmth(3)) NEXT:[jmp(error)] PREV:[r(doSmth)] + jmp(error) NEXT:[] PREV:[r(doSmth(3))] +l5 [skipFinallyToErrorBlock]: + r(3) NEXT:[r(doSmth)] PREV:[jmp(l5 [skipFinallyToErrorBlock])] + 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))] +l6 [stop [d0, d1]]: + NEXT:[] PREV:[ret(*) l1, r(doSmth(3))] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t14 == fun t14() : Int { @@ -820,25 +909,25 @@ l0: } 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)] + }) NEXT:[jmp?(l2 [onException])] PREV:[] + jmp?(l2 [onException]) NEXT:[jmp?(), r(1)] PREV:[r(try { return 1 } catch (e:..)] + r(1) NEXT:[ret(*) l1] PREV:[jmp?(l2 [onException])] ret(*) l1 NEXT:[] PREV:[r(1)] -l3: -- jmp(l4) NEXT:[] PREV:[] -l2: - jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)] +d0: +- jmp(l3 [afterCatches]) NEXT:[] PREV:[] +l2 [onException]: + jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2 [onException])] 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))] + r(doSmth(2)) NEXT:[jmp(l3 [afterCatches])] PREV:[r(doSmth)] +d1: + jmp(l3 [afterCatches]) NEXT:[] PREV:[r(doSmth(2))] l1: -l4: -l6: - NEXT:[] PREV:[ret(*) l1, jmp(l4)] +l3 [afterCatches]: +l4 [stop [d0, d1]]: + NEXT:[] PREV:[ret(*) l1, jmp(l3 [afterCatches])] error: NEXT:[] PREV:[] sink: @@ -858,7 +947,7 @@ fun t15() : Int { } --------------------- l0: - NEXT:[r(try { return 1 } catch (e:..)] PREV:[] + NEXT:[r(try { return 1 } catch (e:..)] PREV:[] r(try { return 1 } @@ -867,37 +956,45 @@ l0: } 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:[] + }) NEXT:[jmp?(l2 [onException])] PREV:[] + jmp?(l2 [onException]) NEXT:[jmp?(), jmp?(l3 [onExceptionToFinallyBlock])] PREV:[r(try { return 1 } catch (e:..)] + jmp?(l3 [onExceptionToFinallyBlock]) NEXT:[r(3), r(1)] PREV:[jmp?(l2 [onException])] + r(1) NEXT:[r(3)] PREV:[jmp?(l3 [onExceptionToFinallyBlock])] + 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))] +d0: +- jmp(l4 [afterCatches]) NEXT:[jmp(l5 [skipFinallyToErrorBlock])] PREV:[] +l2 [onException]: + jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2 [onException])] + 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))] +d1: +- jmp(l4 [afterCatches]) NEXT:[jmp(l5 [skipFinallyToErrorBlock])] PREV:[] +l4 [afterCatches]: +- jmp(l5 [skipFinallyToErrorBlock]) NEXT:[r(3)] PREV:[] +l3 [onExceptionToFinallyBlock]: + r(3) NEXT:[r(doSmth)] PREV:[jmp?(l3 [onExceptionToFinallyBlock])] + r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] + r(doSmth(3)) NEXT:[jmp(error)] PREV:[r(doSmth)] + jmp(error) NEXT:[] PREV:[r(doSmth(3))] +l5 [skipFinallyToErrorBlock]: +- 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] +l6 [stop [d0, d1]]: + NEXT:[] PREV:[ret(*) l1, ret(*) l1] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == t16 == fun t16() : Int { @@ -913,7 +1010,7 @@ fun t16() : Int { } --------------------- l0: - NEXT:[r(try { doSmth(1) } catch (e..)] PREV:[] + NEXT:[r(try { doSmth(1) } catch (e..)] PREV:[] r(try { doSmth(1) } @@ -922,35 +1019,43 @@ l0: } 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)] + }) NEXT:[jmp?(l2 [onException])] PREV:[] + jmp?(l2 [onException]) NEXT:[jmp?(), jmp?(l3 [onExceptionToFinallyBlock])] PREV:[r(try { doSmth(1) } catch (e..)] + jmp?(l3 [onExceptionToFinallyBlock]) NEXT:[r(3), r(1)] PREV:[jmp?(l2 [onException])] + r(1) NEXT:[r(doSmth)] PREV:[jmp?(l3 [onExceptionToFinallyBlock])] + r(doSmth) NEXT:[r(doSmth(1))] PREV:[r(1)] + r(doSmth(1)) NEXT:[jmp(l4 [afterCatches])] PREV:[r(doSmth)] +d0: + jmp(l4 [afterCatches]) NEXT:[jmp(l5 [skipFinallyToErrorBlock])] PREV:[r(doSmth(1))] +l2 [onException]: + jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2 [onException])] + 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))] +d1: +- jmp(l4 [afterCatches]) NEXT:[jmp(l5 [skipFinallyToErrorBlock])] PREV:[] +l4 [afterCatches]: + jmp(l5 [skipFinallyToErrorBlock]) NEXT:[r(3)] PREV:[jmp(l4 [afterCatches])] +l3 [onExceptionToFinallyBlock]: + r(3) NEXT:[r(doSmth)] PREV:[jmp?(l3 [onExceptionToFinallyBlock])] + r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)] + r(doSmth(3)) NEXT:[jmp(error)] PREV:[r(doSmth)] + jmp(error) NEXT:[] PREV:[r(doSmth(3))] +l5 [skipFinallyToErrorBlock]: + r(3) NEXT:[r(doSmth)] PREV:[jmp(l5 [skipFinallyToErrorBlock])] + 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))] +l6 [stop [d0, d1]]: + NEXT:[] PREV:[ret(*) l1, r(doSmth(3))] error: - NEXT:[] PREV:[] + NEXT:[] PREV:[jmp(error)] sink: - NEXT:[] PREV:[, ] + NEXT:[] PREV:[, ] ===================== == doSmth == fun doSmth(i: Int) {