Tests for bug in CFA: no return in when() is now detected

This commit is contained in:
Andrey Breslav
2013-12-02 22:49:35 +04:00
parent ec39105183
commit b15b075484
6 changed files with 56 additions and 1 deletions
@@ -0,0 +1,33 @@
== illegalWhenBlock ==
fun illegalWhenBlock(a: Any): Any {
when(a) {
is Int -> return a
is String -> return a
}
}
---------------------
L0:
<START> NEXT:[v(a: Any)] PREV:[]
v(a: Any) NEXT:[w(a)] PREV:[<START>]
w(a) NEXT:[r(a)] PREV:[v(a: Any)]
r(a) NEXT:[jmp?(L4)] PREV:[w(a)]
jmp?(L4) NEXT:[jmp?(L6), r(a)] PREV:[r(a)]
L3:
r(a) NEXT:[ret(*) L1] PREV:[jmp?(L4)]
ret(*) L1 NEXT:[<END>] PREV:[r(a)]
- jmp(L2) NEXT:[<END>] PREV:[]
L4:
jmp?(L6) NEXT:[<END>, r(a)] PREV:[jmp?(L4)]
L5:
r(a) NEXT:[ret(*) L1] PREV:[jmp?(L6)]
ret(*) L1 NEXT:[<END>] PREV:[r(a)]
- jmp(L2) NEXT:[<END>] PREV:[]
L1:
L2:
L6:
<END> NEXT:[<SINK>] PREV:[ret(*) L1, jmp?(L6), ret(*) L1]
error:
<ERROR> NEXT:[<SINK>] PREV:[]
sink:
<SINK> NEXT:[] PREV:[<ERROR>, <END>]
=====================
+6
View File
@@ -0,0 +1,6 @@
fun illegalWhenBlock(a: Any): Any {
when(a) {
is Int -> return a
is String -> return a
}
}