diff --git a/compiler/testData/cfg/For.instructions b/compiler/testData/cfg/For.instructions new file mode 100644 index 00000000000..4e19aac83c9 --- /dev/null +++ b/compiler/testData/cfg/For.instructions @@ -0,0 +1,40 @@ +== t1 == +fun t1() { + for (i in 1..2) { + doSmth(i) + } +} +--------------------- +l0: + NEXT:[r(1)] PREV:[] + r(1) NEXT:[r(2)] PREV:[] + r(2) NEXT:[r(..)] PREV:[r(1)] + r(..) NEXT:[r(1..2)] PREV:[r(2)] + r(1..2) NEXT:[w(i)] PREV:[r(..)] + w(i) NEXT:[jmp?(l2)] PREV:[r(1..2)] +l3: + jmp?(l2) NEXT:[read (Unit), r(i)] PREV:[w(i)] +l4: +l5: + r(i) NEXT:[r(doSmth)] PREV:[jmp?(l2), jmp?(l4)] + r(doSmth) NEXT:[r(doSmth(i))] PREV:[r(i)] + r(doSmth(i)) NEXT:[jmp?(l4)] PREV:[r(doSmth)] + jmp?(l4) NEXT:[r(i), read (Unit)] PREV:[r(doSmth(i))] +l2: + read (Unit) NEXT:[] PREV:[jmp?(l2), jmp?(l4)] +l1: + NEXT:[] PREV:[read (Unit)] +error: + NEXT:[] PREV:[] +===================== +== doSmth == +fun doSmth(i: Int) {} +--------------------- +l0: + NEXT:[read (Unit)] PREV:[] + read (Unit) NEXT:[] PREV:[] +l1: + NEXT:[] PREV:[read (Unit)] +error: + NEXT:[] PREV:[] +===================== diff --git a/compiler/testData/cfg/For.jet b/compiler/testData/cfg/For.jet new file mode 100644 index 00000000000..35dab23bf0c --- /dev/null +++ b/compiler/testData/cfg/For.jet @@ -0,0 +1,7 @@ +fun t1() { + for (i in 1..2) { + doSmth(i) + } +} + +fun doSmth(i: Int) {} diff --git a/compiler/testData/cfg/If.instructions b/compiler/testData/cfg/If.instructions new file mode 100644 index 00000000000..c4d5a9a542c --- /dev/null +++ b/compiler/testData/cfg/If.instructions @@ -0,0 +1,98 @@ +== t1 == +fun t1(b: Boolean) { + var u: String + if (b) { + u = "s" + } + doSmth(u) + + var r: String + if (b) { + r = "s" + } + else { + r = "t" + } + doSmth(r) +} +--------------------- +l0: + NEXT:[r(b)] PREV:[] + r(b) NEXT:[jf(l2)] PREV:[] + jf(l2) NEXT:[read (Unit), r("s")] PREV:[r(b)] + r("s") NEXT:[w(u)] PREV:[jf(l2)] + w(u) NEXT:[jmp(l3)] PREV:[r("s")] + jmp(l3) NEXT:[r(u)] PREV:[w(u)] +l2: + read (Unit) NEXT:[r(u)] PREV:[jf(l2)] +l3: + r(u) NEXT:[r(doSmth)] PREV:[jmp(l3), read (Unit)] + r(doSmth) NEXT:[r(doSmth(u))] PREV:[r(u)] + r(doSmth(u)) NEXT:[r(b)] PREV:[r(doSmth)] + r(b) NEXT:[jf(l4)] PREV:[r(doSmth(u))] + jf(l4) NEXT:[r("t"), r("s")] PREV:[r(b)] + r("s") NEXT:[w(r)] PREV:[jf(l4)] + w(r) NEXT:[jmp(l5)] PREV:[r("s")] + jmp(l5) NEXT:[r(r)] PREV:[w(r)] +l4: + r("t") NEXT:[w(r)] PREV:[jf(l4)] + w(r) NEXT:[r(r)] PREV:[r("t")] +l5: + r(r) NEXT:[r(doSmth)] PREV:[jmp(l5), w(r)] + r(doSmth) NEXT:[r(doSmth(r))] PREV:[r(r)] + r(doSmth(r)) NEXT:[] PREV:[r(doSmth)] +l1: + NEXT:[] PREV:[r(doSmth(r))] +error: + NEXT:[] PREV:[] +===================== +== t2 == +fun t2(b: Boolean) { + val i = 3 + if (b) { + return; + } + doSmth(i) + if (i is Int) { + return; + } +} +--------------------- +l0: + NEXT:[r(3)] PREV:[] + r(3) NEXT:[w(i)] PREV:[] + w(i) NEXT:[r(b)] PREV:[r(3)] + r(b) NEXT:[jf(l2)] PREV:[w(i)] + jf(l2) NEXT:[read (Unit), ret l1] PREV:[r(b)] + ret l1 NEXT:[] PREV:[jf(l2)] + jmp(l3) NEXT:[r(i)] PREV:[] +l2: + read (Unit) NEXT:[r(i)] PREV:[jf(l2)] +l3: + r(i) NEXT:[r(doSmth)] PREV:[jmp(l3), read (Unit)] + r(doSmth) NEXT:[r(doSmth(i))] PREV:[r(i)] + r(doSmth(i)) NEXT:[r(i)] PREV:[r(doSmth)] + r(i) NEXT:[r(i is Int)] PREV:[r(doSmth(i))] + r(i is Int) NEXT:[jf(l4)] PREV:[r(i)] + jf(l4) NEXT:[read (Unit), ret l1] PREV:[r(i is Int)] + ret l1 NEXT:[] PREV:[jf(l4)] + jmp(l5) NEXT:[] PREV:[] +l4: + read (Unit) NEXT:[] PREV:[jf(l4)] +l1: +l5: + NEXT:[] PREV:[ret l1, ret l1, jmp(l5), read (Unit)] +error: + NEXT:[] PREV:[] +===================== +== doSmth == +fun doSmth(s: String) {} +--------------------- +l0: + NEXT:[read (Unit)] PREV:[] + read (Unit) NEXT:[] PREV:[] +l1: + NEXT:[] PREV:[read (Unit)] +error: + NEXT:[] PREV:[] +===================== diff --git a/compiler/testData/cfg/If.jet b/compiler/testData/cfg/If.jet new file mode 100644 index 00000000000..26e9276b66d --- /dev/null +++ b/compiler/testData/cfg/If.jet @@ -0,0 +1,31 @@ +fun t1(b: Boolean) { + var u: String + if (b) { + u = "s" + } + doSmth(u) + + var r: String + if (b) { + r = "s" + } + else { + r = "t" + } + doSmth(r) +} + +fun t2(b: Boolean) { + val i = 3 + if (b) { + return; + } + doSmth(i) + if (i is Int) { + return; + } +} + +fun doSmth(s: String) {} + +