re PR tree-optimization/67916 (wrong code at -O3 on x86_64-linux-gnu)
authorMarek Polacek <polacek@redhat.com>
Tue, 1 Dec 2015 15:47:34 +0000 (15:47 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Tue, 1 Dec 2015 15:47:34 +0000 (15:47 +0000)
PR tree-optimization/67916
* gcc.dg/torture/pr67916.c: New test.

From-SVN: r231117

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr67916.c [new file with mode: 0644]

index addc48127943fcc1937453176ec3a8551952e072..e009034c6759a7dde6d83fd865c19d7db799dc03 100644 (file)
@@ -1,3 +1,8 @@
+2015-12-01  Marek Polacek  <polacek@redhat.com>
+
+       PR tree-optimization/67916
+       * gcc.dg/torture/pr67916.c: New test.
+
 2015-12-01  Marek Polacek  <polacek@redhat.com>
 
        PR middle-end/68582
diff --git a/gcc/testsuite/gcc.dg/torture/pr67916.c b/gcc/testsuite/gcc.dg/torture/pr67916.c
new file mode 100644 (file)
index 0000000..88541f9
--- /dev/null
@@ -0,0 +1,46 @@
+/* PR tree-optimization/67916 */
+/* { dg-do run } */
+
+int a[6], b = 1, d, e;
+long long c;
+static int f = 1;
+
+void
+fn1 (int p1)
+{
+  b = (b >> 1) & (1 ^ a[(1 ^ p1) & 5]);
+}
+
+void
+fn2 ()
+{
+  b = (b >> 1) & (1 ^ a[(b ^ 1) & 1]);
+  fn1 (c >> 1 & 5);
+  fn1 (c >> 2 & 5);
+  fn1 (c >> 4 & 5);
+  fn1 (c >> 8 & 5);
+}
+
+int
+main ()
+{
+  int i, j;
+  for (; d;)
+    {
+      for (; e;)
+       fn2 ();
+      f = 0;
+    }
+  for (i = 0; i < 8; i++)
+    {
+      if (f)
+       i = 9;
+      for (j = 0; j < 7; j++)
+       fn2 ();
+    }
+
+  if (b != 0)
+    __builtin_abort ();
+
+  return 0;
+}