//KT-1027 Strange selection of unreachable code
This commit is contained in:
@@ -153,6 +153,8 @@ public class JetControlFlowProcessor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitParenthesizedExpression(JetParenthesizedExpression expression) {
|
public void visitParenthesizedExpression(JetParenthesizedExpression expression) {
|
||||||
|
builder.read(expression);
|
||||||
|
|
||||||
JetExpression innerExpression = expression.getExpression();
|
JetExpression innerExpression = expression.getExpression();
|
||||||
if (innerExpression != null) {
|
if (innerExpression != null) {
|
||||||
value(innerExpression, inCondition);
|
value(innerExpression, inCondition);
|
||||||
@@ -340,6 +342,7 @@ public class JetControlFlowProcessor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitTryExpression(JetTryExpression expression) {
|
public void visitTryExpression(JetTryExpression expression) {
|
||||||
|
builder.read(expression);
|
||||||
final JetFinallySection finallyBlock = expression.getFinallyBlock();
|
final JetFinallySection finallyBlock = expression.getFinallyBlock();
|
||||||
if (finallyBlock != null) {
|
if (finallyBlock != null) {
|
||||||
builder.enterTryFinally(new GenerationTrigger() {
|
builder.enterTryFinally(new GenerationTrigger() {
|
||||||
@@ -413,6 +416,7 @@ public class JetControlFlowProcessor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitWhileExpression(JetWhileExpression expression) {
|
public void visitWhileExpression(JetWhileExpression expression) {
|
||||||
|
builder.read(expression);
|
||||||
LoopInfo loopInfo = builder.enterLoop(expression, null, null);
|
LoopInfo loopInfo = builder.enterLoop(expression, null, null);
|
||||||
|
|
||||||
builder.bindLabel(loopInfo.getConditionEntryPoint());
|
builder.bindLabel(loopInfo.getConditionEntryPoint());
|
||||||
@@ -434,6 +438,7 @@ public class JetControlFlowProcessor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitDoWhileExpression(JetDoWhileExpression expression) {
|
public void visitDoWhileExpression(JetDoWhileExpression expression) {
|
||||||
|
builder.read(expression);
|
||||||
LoopInfo loopInfo = builder.enterLoop(expression, null, null);
|
LoopInfo loopInfo = builder.enterLoop(expression, null, null);
|
||||||
|
|
||||||
builder.bindLabel(loopInfo.getBodyEntryPoint());
|
builder.bindLabel(loopInfo.getBodyEntryPoint());
|
||||||
@@ -453,6 +458,7 @@ public class JetControlFlowProcessor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitForExpression(JetForExpression expression) {
|
public void visitForExpression(JetForExpression expression) {
|
||||||
|
builder.read(expression);
|
||||||
JetExpression loopRange = expression.getLoopRange();
|
JetExpression loopRange = expression.getLoopRange();
|
||||||
if (loopRange != null) {
|
if (loopRange != null) {
|
||||||
value(loopRange, false);
|
value(loopRange, false);
|
||||||
|
|||||||
@@ -8,8 +8,13 @@ fun t1() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[r(try { 1 } finally { 2 }) ] PREV:[]
|
||||||
r(1) NEXT:[r(2)] PREV:[<START>]
|
r(try {
|
||||||
|
1
|
||||||
|
} finally {
|
||||||
|
2
|
||||||
|
}) NEXT:[r(1)] PREV:[<START>]
|
||||||
|
r(1) NEXT:[r(2)] PREV:[r(try { 1 } finally { 2 }) ]
|
||||||
l2:
|
l2:
|
||||||
r(2) NEXT:[<END>] PREV:[r(1)]
|
r(2) NEXT:[<END>] PREV:[r(1)]
|
||||||
l1:
|
l1:
|
||||||
@@ -33,8 +38,16 @@ fun t2() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[r(try { 1 if (2 > 3) { retur..)] PREV:[]
|
||||||
r(1) NEXT:[r(2)] PREV:[<START>]
|
r(try {
|
||||||
|
1
|
||||||
|
if (2 > 3) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
2
|
||||||
|
}) NEXT:[r(1)] PREV:[<START>]
|
||||||
|
r(1) NEXT:[r(2)] PREV:[r(try { 1 if (2 > 3) { retur..)]
|
||||||
r(2) NEXT:[r(3)] PREV:[r(1)]
|
r(2) NEXT:[r(3)] PREV:[r(1)]
|
||||||
r(3) NEXT:[r(>)] PREV:[r(2)]
|
r(3) NEXT:[r(>)] PREV:[r(2)]
|
||||||
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
||||||
@@ -64,8 +77,9 @@ sink:
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l3:
|
l3:
|
||||||
<START> NEXT:[r(2)] PREV:[]
|
<START> NEXT:[r(())] PREV:[]
|
||||||
r(2) NEXT:[r(3)] PREV:[<START>]
|
r(()) NEXT:[r(2)] PREV:[<START>]
|
||||||
|
r(2) NEXT:[r(3)] PREV:[r(())]
|
||||||
r(3) NEXT:[r(>)] PREV:[r(2)]
|
r(3) NEXT:[r(>)] PREV:[r(2)]
|
||||||
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
||||||
r(2 > 3) NEXT:[jf(l5)] PREV:[r(>)]
|
r(2 > 3) NEXT:[jf(l5)] PREV:[r(>)]
|
||||||
@@ -97,8 +111,18 @@ fun t3() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[r(try { 1 @{ () => if (2 > 3..)] PREV:[]
|
||||||
r(1) NEXT:[jmp?(l2)] PREV:[<START>]
|
r(try {
|
||||||
|
1
|
||||||
|
@{ () =>
|
||||||
|
if (2 > 3) {
|
||||||
|
return@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
2
|
||||||
|
}) NEXT:[r(1)] PREV:[<START>]
|
||||||
|
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)]
|
jmp?(l2) NEXT:[r({ () => if (2 > 3) { retur..), d({ () => if (2 > 3) { retur..)] PREV:[r(1)]
|
||||||
d({ () =>
|
d({ () =>
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
@@ -121,8 +145,9 @@ error:
|
|||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[d({ () => if (2 > 3) { retur..), <END>]
|
<SINK> NEXT:[] PREV:[d({ () => if (2 > 3) { retur..), <END>]
|
||||||
l3:
|
l3:
|
||||||
<START> NEXT:[r(2)] PREV:[]
|
<START> NEXT:[r(())] PREV:[]
|
||||||
r(2) NEXT:[r(3)] PREV:[<START>]
|
r(()) NEXT:[r(2)] PREV:[<START>]
|
||||||
|
r(2) NEXT:[r(3)] PREV:[r(())]
|
||||||
r(3) NEXT:[r(>)] PREV:[r(2)]
|
r(3) NEXT:[r(>)] PREV:[r(2)]
|
||||||
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
||||||
r(2 > 3) NEXT:[jf(l5)] PREV:[r(>)]
|
r(2 > 3) NEXT:[jf(l5)] PREV:[r(>)]
|
||||||
@@ -152,8 +177,17 @@ sink:
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l3:
|
l3:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[r(())] PREV:[]
|
||||||
r(1) NEXT:[r(2)] PREV:[<START>]
|
r(()) NEXT:[r(try { 1 if (2 > 3) { retur..)] PREV:[<START>]
|
||||||
|
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(2) NEXT:[r(3)] PREV:[r(1)]
|
||||||
r(3) NEXT:[r(>)] PREV:[r(2)]
|
r(3) NEXT:[r(>)] PREV:[r(2)]
|
||||||
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
||||||
@@ -220,8 +254,17 @@ error:
|
|||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[d({ () => try { 1 if (2 > 3)..), <END>]
|
<SINK> NEXT:[] PREV:[d({ () => try { 1 if (2 > 3)..), <END>]
|
||||||
l3:
|
l3:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[r(())] PREV:[]
|
||||||
r(1) NEXT:[r(2)] PREV:[<START>]
|
r(()) NEXT:[r(try { 1 if (2 > 3) { retur..)] PREV:[<START>]
|
||||||
|
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(2) NEXT:[r(3)] PREV:[r(1)]
|
||||||
r(3) NEXT:[r(>)] PREV:[r(2)]
|
r(3) NEXT:[r(>)] PREV:[r(2)]
|
||||||
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
||||||
@@ -258,13 +301,31 @@ fun t5() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(true)] PREV:[]
|
<START> NEXT:[r(while(true) { try { 1 if (..)] PREV:[]
|
||||||
|
r(while(true) {
|
||||||
|
try {
|
||||||
|
1
|
||||||
|
if (2 > 3) {
|
||||||
|
break @
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
2
|
||||||
|
}
|
||||||
|
}) NEXT:[r(true)] PREV:[<START>]
|
||||||
l2:
|
l2:
|
||||||
l5:
|
l5:
|
||||||
r(true) NEXT:[jf(l3)] PREV:[<START>, jmp(l2)]
|
r(true) NEXT:[jf(l3)] PREV:[r(while(true) { try { 1 if (..), jmp(l2)]
|
||||||
jf(l3) NEXT:[read (Unit), r(1)] PREV:[r(true)]
|
jf(l3) NEXT:[read (Unit), r(try { 1 if (2 > 3) { break..)] PREV:[r(true)]
|
||||||
l4:
|
l4:
|
||||||
r(1) NEXT:[r(2)] PREV:[jf(l3)]
|
r(try {
|
||||||
|
1
|
||||||
|
if (2 > 3) {
|
||||||
|
break @
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
2
|
||||||
|
}) NEXT:[r(1)] PREV:[jf(l3)]
|
||||||
|
r(1) NEXT:[r(2)] PREV:[r(try { 1 if (2 > 3) { break..)]
|
||||||
r(2) NEXT:[r(3)] PREV:[r(1)]
|
r(2) NEXT:[r(3)] PREV:[r(1)]
|
||||||
r(3) NEXT:[r(>)] PREV:[r(2)]
|
r(3) NEXT:[r(>)] PREV:[r(2)]
|
||||||
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
||||||
@@ -305,10 +366,27 @@ fun t6() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(true)] PREV:[]
|
<START> 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:[<START>]
|
||||||
|
r(while(true) {
|
||||||
|
1
|
||||||
|
if (2 > 3) {
|
||||||
|
break @
|
||||||
|
}
|
||||||
|
}) NEXT:[r(true)] PREV:[r(try { @ while(true) { 1 if..)]
|
||||||
l2:
|
l2:
|
||||||
l5:
|
l5:
|
||||||
r(true) NEXT:[jf(l3)] PREV:[<START>, jmp(l2)]
|
r(true) NEXT:[jf(l3)] PREV:[r(while(true) { 1 if (2 > 3)..), jmp(l2)]
|
||||||
jf(l3) NEXT:[read (Unit), r(1)] PREV:[r(true)]
|
jf(l3) NEXT:[read (Unit), r(1)] PREV:[r(true)]
|
||||||
l4:
|
l4:
|
||||||
r(1) NEXT:[r(2)] PREV:[jf(l3)]
|
r(1) NEXT:[r(2)] PREV:[jf(l3)]
|
||||||
@@ -351,10 +429,26 @@ fun t7() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(true)] PREV:[]
|
<START> 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:[<START>]
|
||||||
|
r(while(true) {
|
||||||
|
1
|
||||||
|
if (2 > 3) {
|
||||||
|
break @
|
||||||
|
}
|
||||||
|
}) NEXT:[r(true)] PREV:[r(try { @ while(true) { 1 if..)]
|
||||||
l2:
|
l2:
|
||||||
l5:
|
l5:
|
||||||
r(true) NEXT:[jf(l3)] PREV:[<START>, jmp(l2)]
|
r(true) NEXT:[jf(l3)] PREV:[r(while(true) { 1 if (2 > 3)..), jmp(l2)]
|
||||||
jf(l3) NEXT:[read (Unit), r(1)] PREV:[r(true)]
|
jf(l3) NEXT:[read (Unit), r(1)] PREV:[r(true)]
|
||||||
l4:
|
l4:
|
||||||
r(1) NEXT:[r(2)] PREV:[jf(l3)]
|
r(1) NEXT:[r(2)] PREV:[jf(l3)]
|
||||||
@@ -398,25 +492,43 @@ fun t8(a : Int) {
|
|||||||
l0:
|
l0:
|
||||||
<START> NEXT:[v(a : Int)] PREV:[]
|
<START> NEXT:[v(a : Int)] PREV:[]
|
||||||
v(a : Int) NEXT:[w(a)] PREV:[<START>]
|
v(a : Int) NEXT:[w(a)] PREV:[<START>]
|
||||||
w(a) NEXT:[r(1)] PREV:[v(a : Int)]
|
w(a) NEXT:[r(for (i in 1..a) { try { 1 ..)] PREV:[v(a : Int)]
|
||||||
r(1) NEXT:[r(a)] PREV:[w(a)]
|
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(a) NEXT:[r(..)] PREV:[r(1)]
|
||||||
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
||||||
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
||||||
v(i) NEXT:[w(i)] PREV:[r(1..a)]
|
v(i) NEXT:[w(i)] PREV:[r(1..a)]
|
||||||
w(i) NEXT:[jmp?(l2)] PREV:[v(i)]
|
w(i) NEXT:[jmp?(l2)] PREV:[v(i)]
|
||||||
l3:
|
l3:
|
||||||
jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)]
|
jmp?(l2) NEXT:[read (Unit), r(try { 1 if (2 > 3) { conti..)] PREV:[w(i)]
|
||||||
l4:
|
l4:
|
||||||
l5:
|
l5:
|
||||||
r(1) NEXT:[r(2)] PREV:[jmp?(l2), jmp(l4), jmp?(l4)]
|
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(2) NEXT:[r(3)] PREV:[r(1)]
|
||||||
r(3) NEXT:[r(>)] PREV:[r(2)]
|
r(3) NEXT:[r(>)] PREV:[r(2)]
|
||||||
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
r(>) NEXT:[r(2 > 3)] PREV:[r(3)]
|
||||||
r(2 > 3) NEXT:[jf(l6)] PREV:[r(>)]
|
r(2 > 3) NEXT:[jf(l6)] PREV:[r(>)]
|
||||||
jf(l6) NEXT:[read (Unit), r(2)] PREV:[r(2 > 3)]
|
jf(l6) NEXT:[read (Unit), r(2)] PREV:[r(2 > 3)]
|
||||||
r(2) NEXT:[jmp(l4)] PREV:[jf(l6)]
|
r(2) NEXT:[jmp(l4)] PREV:[jf(l6)]
|
||||||
jmp(l4) NEXT:[r(1)] PREV:[r(2)]
|
jmp(l4) NEXT:[r(try { 1 if (2 > 3) { conti..)] PREV:[r(2)]
|
||||||
- jmp(l7) NEXT:[r(2)] PREV:[]
|
- jmp(l7) NEXT:[r(2)] PREV:[]
|
||||||
l6:
|
l6:
|
||||||
read (Unit) NEXT:[r(2)] PREV:[jf(l6)]
|
read (Unit) NEXT:[r(2)] PREV:[jf(l6)]
|
||||||
@@ -424,7 +536,7 @@ l7:
|
|||||||
l8:
|
l8:
|
||||||
r(2) NEXT:[jmp?(l4)] PREV:[read (Unit)]
|
r(2) NEXT:[jmp?(l4)] PREV:[read (Unit)]
|
||||||
l9:
|
l9:
|
||||||
jmp?(l4) NEXT:[r(1), read (Unit)] PREV:[r(2)]
|
jmp?(l4) NEXT:[r(try { 1 if (2 > 3) { conti..), read (Unit)] PREV:[r(2)]
|
||||||
l2:
|
l2:
|
||||||
read (Unit) NEXT:[<END>] PREV:[jmp?(l2), jmp?(l4)]
|
read (Unit) NEXT:[<END>] PREV:[jmp?(l2), jmp?(l4)]
|
||||||
l1:
|
l1:
|
||||||
@@ -452,8 +564,25 @@ fun t9(a : Int) {
|
|||||||
l0:
|
l0:
|
||||||
<START> NEXT:[v(a : Int)] PREV:[]
|
<START> NEXT:[v(a : Int)] PREV:[]
|
||||||
v(a : Int) NEXT:[w(a)] PREV:[<START>]
|
v(a : Int) NEXT:[w(a)] PREV:[<START>]
|
||||||
w(a) NEXT:[r(1)] PREV:[v(a : Int)]
|
w(a) NEXT:[r(try { @ for (i in 1..a) { ..)] PREV:[v(a : Int)]
|
||||||
r(1) NEXT:[r(a)] PREV:[w(a)]
|
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(a) NEXT:[r(..)] PREV:[r(1)]
|
||||||
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
||||||
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
||||||
@@ -505,8 +634,24 @@ fun t10(a : Int) {
|
|||||||
l0:
|
l0:
|
||||||
<START> NEXT:[v(a : Int)] PREV:[]
|
<START> NEXT:[v(a : Int)] PREV:[]
|
||||||
v(a : Int) NEXT:[w(a)] PREV:[<START>]
|
v(a : Int) NEXT:[w(a)] PREV:[<START>]
|
||||||
w(a) NEXT:[r(1)] PREV:[v(a : Int)]
|
w(a) NEXT:[r(try { @ for (i in 1..a) { ..)] PREV:[v(a : Int)]
|
||||||
r(1) NEXT:[r(a)] PREV:[w(a)]
|
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(a) NEXT:[r(..)] PREV:[r(1)]
|
||||||
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
||||||
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
||||||
@@ -551,8 +696,14 @@ fun t11() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[r(try { return 1 } finally {..)] PREV:[]
|
||||||
r(1) NEXT:[r(2)] PREV:[<START>]
|
r(try {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
return 2
|
||||||
|
}) NEXT:[r(1)] PREV:[<START>]
|
||||||
|
r(1) NEXT:[r(2)] PREV:[r(try { return 1 } finally {..)]
|
||||||
r(2) NEXT:[ret(*) l1] PREV:[r(1)]
|
r(2) NEXT:[ret(*) l1] PREV:[r(1)]
|
||||||
ret(*) l1 NEXT:[<END>] PREV:[r(2)]
|
ret(*) l1 NEXT:[<END>] PREV:[r(2)]
|
||||||
- ret(*) l1 NEXT:[<END>] PREV:[]
|
- ret(*) l1 NEXT:[<END>] PREV:[]
|
||||||
@@ -578,8 +729,14 @@ fun t12() : Int {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[r(try { return 1 } finally {..)] PREV:[]
|
||||||
r(1) NEXT:[r(3)] PREV:[<START>]
|
r(try {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
doSmth(3)
|
||||||
|
}) NEXT:[r(1)] PREV:[<START>]
|
||||||
|
r(1) NEXT:[r(3)] PREV:[r(try { return 1 } finally {..)]
|
||||||
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
||||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||||
@@ -610,8 +767,17 @@ fun t13() : Int {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
<START> NEXT:[r(try { return 1 } catch (e:..)] PREV:[]
|
||||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
r(try {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
catch (e: UnsupportedOperationException) {
|
||||||
|
doSmth(2)
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
doSmth(3)
|
||||||
|
}) NEXT:[jmp?(l2)] PREV:[<START>]
|
||||||
|
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[r(try { return 1 } catch (e:..)]
|
||||||
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
||||||
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
||||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||||
@@ -651,8 +817,14 @@ fun t14() : Int {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
<START> NEXT:[r(try { return 1 } catch (e:..)] PREV:[]
|
||||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
r(try {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
catch (e: UnsupportedOperationException) {
|
||||||
|
doSmth(2)
|
||||||
|
}) NEXT:[jmp?(l2)] PREV:[<START>]
|
||||||
|
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[r(try { return 1 } catch (e:..)]
|
||||||
r(1) NEXT:[ret(*) l1] PREV:[jmp?(l2)]
|
r(1) NEXT:[ret(*) l1] PREV:[jmp?(l2)]
|
||||||
ret(*) l1 NEXT:[<END>] PREV:[r(1)]
|
ret(*) l1 NEXT:[<END>] PREV:[r(1)]
|
||||||
l3:
|
l3:
|
||||||
@@ -689,8 +861,17 @@ fun t15() : Int {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
<START> NEXT:[r(try { return 1 } catch (e:..)] PREV:[]
|
||||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
r(try {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
catch (e: UnsupportedOperationException) {
|
||||||
|
return 2
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
doSmth(3)
|
||||||
|
}) NEXT:[jmp?(l2)] PREV:[<START>]
|
||||||
|
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[r(try { return 1 } catch (e:..)]
|
||||||
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
||||||
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
||||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||||
@@ -735,8 +916,17 @@ fun t16() : Int {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
<START> NEXT:[r(try { doSmth(1) } catch (e..)] PREV:[]
|
||||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
r(try {
|
||||||
|
doSmth(1)
|
||||||
|
}
|
||||||
|
catch (e: UnsupportedOperationException) {
|
||||||
|
return 2
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
doSmth(3)
|
||||||
|
}) NEXT:[jmp?(l2)] PREV:[<START>]
|
||||||
|
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[r(try { doSmth(1) } catch (e..)]
|
||||||
r(1) NEXT:[r(doSmth)] PREV:[jmp?(l2)]
|
r(1) NEXT:[r(doSmth)] PREV:[jmp?(l2)]
|
||||||
r(doSmth) NEXT:[r(doSmth(1))] PREV:[r(1)]
|
r(doSmth) NEXT:[r(doSmth(1))] PREV:[r(1)]
|
||||||
r(doSmth(1)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
r(doSmth(1)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ fun t1() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[r(for (i in 1..2) { doSmth(i..)] PREV:[]
|
||||||
r(1) NEXT:[r(2)] PREV:[<START>]
|
r(for (i in 1..2) {
|
||||||
|
doSmth(i)
|
||||||
|
}) NEXT:[r(1)] PREV:[<START>]
|
||||||
|
r(1) NEXT:[r(2)] PREV:[r(for (i in 1..2) { doSmth(i..)]
|
||||||
r(2) NEXT:[r(..)] PREV:[r(1)]
|
r(2) NEXT:[r(..)] PREV:[r(1)]
|
||||||
r(..) NEXT:[r(1..2)] PREV:[r(2)]
|
r(..) NEXT:[r(1..2)] PREV:[r(2)]
|
||||||
r(1..2) NEXT:[v(i)] PREV:[r(..)]
|
r(1..2) NEXT:[v(i)] PREV:[r(..)]
|
||||||
|
|||||||
@@ -6,10 +6,13 @@ fun main() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[r(while(1 > 0) { 2 }) ] PREV:[]
|
||||||
|
r(while(1 > 0) {
|
||||||
|
2
|
||||||
|
}) NEXT:[r(1)] PREV:[<START>]
|
||||||
l2:
|
l2:
|
||||||
l5:
|
l5:
|
||||||
r(1) NEXT:[r(0)] PREV:[<START>, jmp(l2)]
|
r(1) NEXT:[r(0)] PREV:[r(while(1 > 0) { 2 }) , jmp(l2)]
|
||||||
r(0) NEXT:[r(>)] PREV:[r(1)]
|
r(0) NEXT:[r(>)] PREV:[r(1)]
|
||||||
r(>) NEXT:[r(1 > 0)] PREV:[r(0)]
|
r(>) NEXT:[r(1 > 0)] PREV:[r(0)]
|
||||||
r(1 > 0) NEXT:[jf(l3)] PREV:[r(>)]
|
r(1 > 0) NEXT:[jf(l3)] PREV:[r(>)]
|
||||||
@@ -33,10 +36,12 @@ fun dowhile() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[ret l1] PREV:[]
|
<START> NEXT:[r(do {return} while(1 > 0)) ] PREV:[]
|
||||||
|
r(do {return}
|
||||||
|
while(1 > 0)) NEXT:[ret l1] PREV:[<START>]
|
||||||
l2:
|
l2:
|
||||||
l4:
|
l4:
|
||||||
ret l1 NEXT:[<END>] PREV:[<START>]
|
ret l1 NEXT:[<END>] PREV:[r(do {return} while(1 > 0)) ]
|
||||||
l5:
|
l5:
|
||||||
- r(1) NEXT:[r(0)] PREV:[]
|
- r(1) NEXT:[r(0)] PREV:[]
|
||||||
- r(0) NEXT:[r(>)] PREV:[]
|
- r(0) NEXT:[r(>)] PREV:[]
|
||||||
|
|||||||
@@ -6,8 +6,9 @@ fun blockAndAndMismatch() : Boolean {
|
|||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(false)] PREV:[]
|
<START> NEXT:[r(false)] PREV:[]
|
||||||
r(false) NEXT:[jt(l2)] PREV:[<START>]
|
r(false) NEXT:[jt(l2)] PREV:[<START>]
|
||||||
jt(l2) NEXT:[r(false), r(false || (return false))] PREV:[r(false)]
|
jt(l2) NEXT:[r((return false)), r(false || (return false))] PREV:[r(false)]
|
||||||
r(false) NEXT:[ret(*) l1] PREV:[jt(l2)]
|
r((return false)) NEXT:[r(false)] PREV:[jt(l2)]
|
||||||
|
r(false) NEXT:[ret(*) l1] PREV:[r((return false))]
|
||||||
ret(*) l1 NEXT:[<END>] PREV:[r(false)]
|
ret(*) l1 NEXT:[<END>] PREV:[r(false)]
|
||||||
l2:
|
l2:
|
||||||
r(false || (return false)) NEXT:[<END>] PREV:[jt(l2)]
|
r(false || (return false)) NEXT:[<END>] PREV:[jt(l2)]
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ package kt1001
|
|||||||
fun foo(<!UNUSED_PARAMETER!>c<!>: Array<Int>) {
|
fun foo(<!UNUSED_PARAMETER!>c<!>: Array<Int>) {
|
||||||
return
|
return
|
||||||
|
|
||||||
for (<!UNREACHABLE_CODE!>i<!> in <!UNREACHABLE_CODE!>c<!>) {}
|
<!UNREACHABLE_CODE!>for (i in c) {}<!>
|
||||||
for (<!UNREACHABLE_CODE!>i<!> in <!UNREACHABLE_CODE!>c<!>) {}
|
<!UNREACHABLE_CODE!>for (i in c) {}<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
//more tests
|
//more tests
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
//KT-1027 Strange selection of unreachable code
|
||||||
|
//+JDK
|
||||||
|
|
||||||
|
package kt1027
|
||||||
|
|
||||||
|
import java.util.List
|
||||||
|
|
||||||
|
fun foo(<!UNUSED_PARAMETER!>c<!>: List<Int>) {
|
||||||
|
var <!UNUSED_VARIABLE!>i<!> = 2
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
<!UNREACHABLE_CODE!>for (j in c) { //strange selection of unreachable code
|
||||||
|
i += 23
|
||||||
|
}<!>
|
||||||
|
}
|
||||||
|
|
||||||
|
fun t1() {
|
||||||
|
return
|
||||||
|
|
||||||
|
<!UNREACHABLE_CODE!>while(true) {
|
||||||
|
doSmth()
|
||||||
|
}<!>
|
||||||
|
}
|
||||||
|
|
||||||
|
fun t2() {
|
||||||
|
return
|
||||||
|
|
||||||
|
<!UNREACHABLE_CODE!>do {
|
||||||
|
doSmth()
|
||||||
|
} while (true)<!>
|
||||||
|
}
|
||||||
|
|
||||||
|
fun t3() {
|
||||||
|
return
|
||||||
|
|
||||||
|
<!UNREACHABLE_CODE!>try {
|
||||||
|
doSmth()
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
doSmth()
|
||||||
|
}<!>
|
||||||
|
}
|
||||||
|
|
||||||
|
fun t4() {
|
||||||
|
return
|
||||||
|
|
||||||
|
<!UNREACHABLE_CODE!>(43)<!>
|
||||||
|
}
|
||||||
|
|
||||||
|
fun doSmth() {}
|
||||||
Reference in New Issue
Block a user