This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix PR79186


Bootstrapped / tested on x86_64-unknown-linux-gnu, applied.

Richard.

2017-01-23  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/79186
	* tree-vrp.c (register_new_assert_for): Make sure we've seen
	both incoming edges before moving an assert.

	* gcc.dg/torture/pr79186.c: New testcase.
	* gcc.dg/torture/pr79187.c: Likewise.

Index: gcc/tree-vrp.c
===================================================================
--- gcc/tree-vrp.c	(revision 244771)
+++ gcc/tree-vrp.c	(working copy)
@@ -5035,6 +5035,7 @@ register_new_assert_for (tree name, tree
 	  /* If we have the same assertion on all incoming edges of a BB
 	     instead insert it at the beginning of it.  */
 	  if (e && loc->e
+	      && e != loc->e
 	      && dest_bb == loc->e->dest
 	      && EDGE_COUNT (dest_bb->preds) == 2)
 	    {
Index: gcc/testsuite/gcc.dg/torture/pr79186.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr79186.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/torture/pr79186.c	(working copy)
@@ -0,0 +1,16 @@
+/* { dg-do run } */
+
+int a, b;
+unsigned char c, d, e;
+
+int main ()
+{ 
+  if (b || !a)
+    { 
+      c = a;
+      if (!c && !a)
+	d = 0;
+      e = -a;
+    }
+  return 0;
+}
Index: gcc/testsuite/gcc.dg/torture/pr79187.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr79187.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/torture/pr79187.c	(working copy)
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+
+int printf (const char *, ...);
+
+int a, b = -600, c, d[] = { 0 }, e, f, g = -1, h;
+unsigned i = ~0;
+
+int main ()
+{
+  for (; h < 2; h++)
+    {
+      if (a > 0)
+	printf ("%d\n", d[b]);
+      f = ~(b % i);
+      c = g | (f && g) && e | b;
+      a = ~(~g & b);
+    }
+  return 0; 
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]