Pseudocode: Do not generate implicit return instruction inside of

Unit-typed lambdas
 #KT-5549 Fixed
This commit is contained in:
Alexey Sedunov
2014-07-29 20:53:23 +04:00
parent 17dd5b9d05
commit 9fee8600cb
17 changed files with 63 additions and 33 deletions
@@ -152,9 +152,8 @@ L6:
read (Unit) PREV:[jf(L6|<v2>)]
L7:
merge(if (2 > 3) { return@l }|!<v3>) -> <v4>
4 ret(*|<v4>) L5
L5:
<END> NEXT:[<SINK>] PREV:[ret L5, ret(*|<v4>) L5]
4 <END> NEXT:[<SINK>] PREV:[ret L5, merge(if (2 > 3) { return@l }|!<v3>) -> <v4>]
error:
<ERROR> PREV:[]
sink:
@@ -235,9 +234,8 @@ L10 [skipFinallyToErrorBlock]:
7 mark({ 2 }) PREV:[jmp(L10 [skipFinallyToErrorBlock])]
r(2) -> <v4>
4 merge(try { 1 if (2 > 3) { return@l } } finally { 2 }|<v6>) -> <v7>
3 ret(*|<v7>) L4
L4:
<END> NEXT:[<SINK>] PREV:[ret L4, ret(*|<v7>) L4]
3 <END> NEXT:[<SINK>] PREV:[ret L4, merge(try { 1 if (2 > 3) { return@l } } finally { 2 }|<v6>) -> <v7>]
error:
<ERROR> PREV:[jmp(error)]
sink:
@@ -74,8 +74,8 @@ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } <v3>: * NEW:
2 > 3 <v2>: Boolean NEW: call(2 > 3, compareTo|<v0>, <v1>) -> <v2>
return@l !<v3>: *
{ return@l } !<v3>: * COPY
if (2 > 3) { return@l } <v4>: Unit NEW: merge(if (2 > 3) { return@l }|!<v3>) -> <v4>
if (2 > 3) { return@l } <v4>: Unit COPY
if (2 > 3) { return@l } <v4>: * NEW: merge(if (2 > 3) { return@l }|!<v3>) -> <v4>
if (2 > 3) { return@l } <v4>: * COPY
=====================
== t4 ==
fun t4() {
@@ -113,12 +113,12 @@ fun t4() {
2 > 3 <v3>: Boolean NEW: call(2 > 3, compareTo|<v1>, <v2>) -> <v3>
return@l !<v5>: *
{ return@l } !<v5>: * COPY
if (2 > 3) { return@l } <v6>: Unit NEW: merge(if (2 > 3) { return@l }|!<v5>) -> <v6>
{ 1 if (2 > 3) { return@l } } <v6>: Unit COPY
if (2 > 3) { return@l } <v6>: * NEW: merge(if (2 > 3) { return@l }|!<v5>) -> <v6>
{ 1 if (2 > 3) { return@l } } <v6>: * COPY
2 <v4>: * NEW: r(2) -> <v4>
{ 2 } <v4>: * COPY
try { 1 if (2 > 3) { return@l } } finally { 2 } <v7>: Unit NEW: merge(try { 1 if (2 > 3) { return@l } } finally { 2 }|<v6>) -> <v7>
try { 1 if (2 > 3) { return@l } } finally { 2 } <v7>: Unit COPY
try { 1 if (2 > 3) { return@l } } finally { 2 } <v7>: * NEW: merge(try { 1 if (2 > 3) { return@l } } finally { 2 }|<v6>) -> <v7>
try { 1 if (2 > 3) { return@l } } finally { 2 } <v7>: * COPY
=====================
== t5 ==
fun t5() {