From 52bf506762f2d04ba37701af41b7b06c0d6dc7f9 Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Thu, 16 May 2019 12:57:50 -0700
Subject: stmt: continue in do-loop should evaluate controlling expression

---
 test/do-loop.c   |  9 +++++++++
 test/do-loop.qbe | 31 +++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+)
 create mode 100644 test/do-loop.c
 create mode 100644 test/do-loop.qbe

(limited to 'test')

diff --git a/test/do-loop.c b/test/do-loop.c
new file mode 100644
index 0000000..2189a67
--- /dev/null
+++ b/test/do-loop.c
@@ -0,0 +1,9 @@
+int main(void) {
+	int x = 2, y = 0;
+	do {
+		if (x == 1)
+			continue;
+		++y;
+	} while (x--);
+	return y != 2;
+}
diff --git a/test/do-loop.qbe b/test/do-loop.qbe
new file mode 100644
index 0000000..c13b8fe
--- /dev/null
+++ b/test/do-loop.qbe
@@ -0,0 +1,31 @@
+export
+function w $main() {
+@start.1
+	%.1 =l alloc4 4
+	%.3 =l alloc4 4
+@body.2
+	%.2 =l add %.1, 0
+	storew 2, %.2
+	%.4 =l add %.3, 0
+	storew 0, %.4
+@do_body.3
+	%.5 =w loadsw %.1
+	%.6 =w ceqw %.5, 1
+	%.7 =w cnew %.6, 0
+	jnz %.7, @if_true.6, @if_false.7
+@if_true.6
+	jmp @do_cont.4
+@if_false.7
+	%.8 =w loadsw %.3
+	%.9 =w add %.8, 1
+	storew %.9, %.3
+@do_cont.4
+	%.10 =w loadsw %.1
+	%.11 =w sub %.10, 1
+	storew %.11, %.1
+	jnz %.10, @do_body.3, @do_join.5
+@do_join.5
+	%.12 =w loadsw %.3
+	%.13 =w cnew %.12, 2
+	ret %.13
+}
-- 
cgit v1.2.3