aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-08-08 10:22:40 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-08-22 09:25:34 +0200
commitcd554eebc1d6b10546f8478e47490737168644d7 (patch)
treecc11cd574ed22937564db239c5cbc59a939a7e63
parentc05b1caa7c81b945526b77e84b888f48cfa91780 (diff)
downloadsparse-dev-cd554eebc1d6b10546f8478e47490737168644d7.tar.gz
add testcase for (((x & M') | (y & M'')) & M)
There is a potential problem when the second side of the OR is simplified away. Add 2 testcases to catch possible regressions here. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--validation/optim/and-or-crash.c5
-rw-r--r--validation/optim/and-or-mask.c18
2 files changed, 23 insertions, 0 deletions
diff --git a/validation/optim/and-or-crash.c b/validation/optim/and-or-crash.c
new file mode 100644
index 00000000..98a8a9b8
--- /dev/null
+++ b/validation/optim/and-or-crash.c
@@ -0,0 +1,5 @@
+static unsigned a(unsigned b, unsigned c) { (c << 1 | b & 1 << 1) >> 1; }
+
+/*
+ * check-name: catch crashes during AND-OR simplifications
+ */
diff --git a/validation/optim/and-or-mask.c b/validation/optim/and-or-mask.c
new file mode 100644
index 00000000..46803789
--- /dev/null
+++ b/validation/optim/and-or-mask.c
@@ -0,0 +1,18 @@
+int foo(int a, int b)
+{
+ return ((a & 7) | (b & 3)) & 8;
+}
+
+/*
+ * check-name: and-or-mask
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-start
+foo:
+.L0:
+ <entry-point>
+ ret.32 $0
+
+
+ * check-output-end
+ */