aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-03-21 23:05:05 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-04-01 11:59:16 +0200
commit7a0eaa532f289c6a252f30023581f58bae7a446a (patch)
tree2f92869ce3568c1790fc7de7eacaedf81f267ead /validation
parent97ebb345943918a0688b62cbc9bf878de01ccba4 (diff)
downloadsparse-dev-7a0eaa532f289c6a252f30023581f58bae7a446a.tar.gz
fix OP_PHI usage in try_to_simplify_bb(), correctly
Patch 11b1a83b1 solved an issue with dangling PSEUDO_PHI by killing it's use after a branch rewrite. However, the change didn't took in account the fact that, even after the branch rewrite, some other paths may exist where this pseudo was needed. Fix this by cheking that no such path exist before killing the (usage of the) pseudo. Fixes: 11b1a83b1 "fix OP_PHI usage in try_to_simplify_bb()" Reported-by: Dibyendu Majumdar <mobile@majumdar.org.uk> Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation')
-rw-r--r--validation/kill-phi-ttsbb2.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/validation/kill-phi-ttsbb2.c b/validation/kill-phi-ttsbb2.c
new file mode 100644
index 00000000..c7d89aa0
--- /dev/null
+++ b/validation/kill-phi-ttsbb2.c
@@ -0,0 +1,40 @@
+extern int error(int);
+
+int foo(int perr);
+int foo(int perr)
+{
+ int err = 0;
+ int rc = 0;
+ int j = 0;
+ int i = 1;
+
+ i && j++;
+
+ i-- && j;
+
+ i && j--;
+
+ if (j != 1) {
+ err = 1;
+ if (perr)
+ error(1);
+ }
+
+ if (err != 0)
+ rc = 1;
+
+ return rc;
+}
+
+/*
+ * check-name: kill-phi-ttsbb2
+ * check-description:
+ * Verify if OP_PHI usage is adjusted after successful try_to_simplify_bb()
+ * check-warning: this test is sensitive to details of code generation
+ * with proper bb packing (taking care of phi-nodes) it
+ * will be optimized away and test nothing. You have been warned.
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: VOID
+ */