Pseudocode: Generate UNSUPPORTED_ELEMENT for misplaced returns

This commit is contained in:
Alexey Sedunov
2014-07-21 15:46:52 +04:00
parent b0bf11c51e
commit d07deeb5fb
6 changed files with 66 additions and 0 deletions
@@ -1019,6 +1019,9 @@ public class JetControlFlowProcessor {
builder.returnValue(expression, returnValue, subroutine);
}
}
else {
createNonSyntheticValue(expression, MagicKind.UNSUPPORTED_ELEMENT, returnedExpression);
}
}
@Override
@@ -0,0 +1,34 @@
== a ==
val a: Int = return 1
---------------------
L0:
1 <START>
v(val a: Int = return 1)
r(1) -> <v0>
magic[UNSUPPORTED_ELEMENT](return 1|<v0>) -> <v1>
w(a|<v1>)
L1:
<END> NEXT:[<SINK>]
error:
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
== A ==
class A {
val a: Int = return 1
}
---------------------
L0:
1 <START>
v(val a: Int = return 1)
r(1) -> <v0>
magic[UNSUPPORTED_ELEMENT](return 1|<v0>) -> <v1>
w(a|<v1>)
L1:
<END> NEXT:[<SINK>]
error:
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
@@ -0,0 +1,5 @@
val a: Int = return 1
class A {
val a: Int = return 1
}
@@ -0,0 +1,14 @@
== a ==
val a: Int = return 1
---------------------
1 <v0>: * NEW: r(1) -> <v0>
return 1 <v1>: Int NEW: magic[UNSUPPORTED_ELEMENT](return 1|<v0>) -> <v1>
=====================
== A ==
class A {
val a: Int = return 1
}
---------------------
1 <v0>: * NEW: r(1) -> <v0>
return 1 <v1>: Int NEW: magic[UNSUPPORTED_ELEMENT](return 1|<v0>) -> <v1>
=====================
@@ -439,6 +439,11 @@ public class ControlFlowTestGenerated extends AbstractControlFlowTest {
doTest("compiler/testData/cfg/expressions/unresolvedWriteLHS.kt");
}
@TestMetadata("unsupportedReturns.kt")
public void testUnsupportedReturns() throws Exception {
doTest("compiler/testData/cfg/expressions/unsupportedReturns.kt");
}
@TestMetadata("unusedExpressionSimpleName.kt")
public void testUnusedExpressionSimpleName() throws Exception {
doTest("compiler/testData/cfg/expressions/unusedExpressionSimpleName.kt");
@@ -443,6 +443,11 @@ public class PseudoValueTestGenerated extends AbstractPseudoValueTest {
doTest("compiler/testData/cfg/expressions/unresolvedWriteLHS.kt");
}
@TestMetadata("unsupportedReturns.kt")
public void testUnsupportedReturns() throws Exception {
doTest("compiler/testData/cfg/expressions/unsupportedReturns.kt");
}
@TestMetadata("unusedExpressionSimpleName.kt")
public void testUnusedExpressionSimpleName() throws Exception {
doTest("compiler/testData/cfg/expressions/unusedExpressionSimpleName.kt");