Loops are followed by read(Unit) in order to prevent the CFA from thinking that the condition is returned

This commit is contained in:
Andrey Breslav
2011-04-14 19:53:32 +04:00
parent 9d32723cbf
commit 5963e952da
5 changed files with 69 additions and 12 deletions
+10 -4
View File
@@ -227,8 +227,9 @@ l4:
l6:
r(2)
jmp(l3)
l1:
l2:
read (Unit)
l1:
<END>
=====================
== t3 ==
@@ -265,6 +266,7 @@ l5:
l6:
jmp(l4)
l3:
read (Unit)
r(5)
l2:
r(2)
@@ -303,8 +305,9 @@ l5:
read (Unit)
l6:
jmp(l4)
l2:
l3:
read (Unit)
l2:
r(2)
l1:
<END>
@@ -347,8 +350,9 @@ l4:
l6:
r(2)
jmp?(l3)
l1:
l2:
read (Unit)
l1:
<END>
=====================
== t3 ==
@@ -388,6 +392,7 @@ l5:
l6:
jmp?(l4)
l3:
read (Unit)
r(5)
l2:
r(2)
@@ -429,8 +434,9 @@ l5:
read (Unit)
l6:
jmp?(l4)
l2:
l3:
read (Unit)
l2:
r(2)
l1:
<END>
@@ -0,0 +1,42 @@
== main ==
fun main() {
while(1 > 0) {
2
}
}
---------------------
l0:
<START>
l3:
r(1)
r(0)
r(>)
r(1 > 0)
jf(l2)
r(2)
jmp(l3)
l2:
read (Unit)
l1:
<END>
=====================
== dowhile ==
fun dowhile() {
do {return}
while(1 > 0)
}
---------------------
l0:
<START>
l3:
ret l1
r(1)
r(0)
r(>)
r(1 > 0)
jt(l3)
l2:
read (Unit)
l1:
<END>
=====================
@@ -0,0 +1,10 @@
fun main() {
while(1 > 0) {
2
}
}
fun dowhile() {
do {return}
while(1 > 0)
}