]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/69352 (profiledbootstrap failure with --with-build-config...
authorRichard Biener <rguenther@suse.de>
Tue, 19 Jan 2016 13:19:01 +0000 (13:19 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 19 Jan 2016 13:19:01 +0000 (13:19 +0000)
2016-01-19  Richard Biener  <rguenther@suse.de>

PR tree-optimization/69352
* tree-ssa-scopedtables.c (avail_expr_hash): Check for size == -1.
(equal_mem_array_ref_p): Constrain size and max size properly.
Compare the reverse flag.

* gcc.dg/torture/pr69352.c: New testcase.

From-SVN: r232557

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr69352.c [new file with mode: 0644]
gcc/tree-ssa-scopedtables.c

index 6cf6bbcc0e8125c580da350f9aff866142ee532d..fbf3e767137ae31326ce2c995f0c708d31b666d8 100644 (file)
@@ -1,3 +1,10 @@
+2016-01-19  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/69352
+       * tree-ssa-scopedtables.c (avail_expr_hash): Check for size == -1.
+       (equal_mem_array_ref_p): Constrain size and max size properly.
+       Compare the reverse flag.
+
 2016-01-19  Bernd Schmidt  <bschmidt@redhat.com>
 
        * ira.c (ira): Update regstat data if we deleted insns.
index b9365f0207e0f340c7181a81e86bcdea683d46b7..2a606599f3ca234cff1bcc07499118b731566c20 100644 (file)
@@ -1,3 +1,8 @@
+2016-01-19  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/69352
+       * gcc.dg/torture/pr69352.c: New testcase.
+
 2016-01-19  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/68955
diff --git a/gcc/testsuite/gcc.dg/torture/pr69352.c b/gcc/testsuite/gcc.dg/torture/pr69352.c
new file mode 100644 (file)
index 0000000..ad718b9
--- /dev/null
@@ -0,0 +1,40 @@
+/* { dg-do compile } */
+
+int a[10][14], b, c, d, e, f, g, h, i;
+void bar (void);
+int
+foo (int x)
+{
+  unsigned j;
+  int k = 0, l;
+  int m;
+  if (h)
+    m = 12;
+  else
+    m = 13;
+  if (a[x][m])
+    l = (long) foo;
+  a[x][i] = l;
+  while (c)
+    {
+      if (b)
+       {
+         if (f)
+           k = 1;
+         bar ();
+       }
+      for (; d;)
+       j++;
+    }
+  while (c)
+    {
+      if (a[x][12])
+       {
+         if (g)
+           k = 1;
+         j++;
+       }
+      c = e;
+    }
+  return k;
+}
index af79535cc02718e9c7b7095d44ed7fd37afd9dd8..c421f435f20759ff0c2e379e7f7c1c240402f0ef 100644 (file)
@@ -225,7 +225,8 @@ avail_expr_hash (class expr_hash_elt *p)
                                               &reverse);
          /* Strictly, we could try to normalize variable-sized accesses too,
            but here we just deal with the common case.  */
-         if (size == max_size)
+         if (size != -1
+             && size == max_size)
            {
              enum tree_code code = MEM_REF;
              hstate.add_object (code);
@@ -261,15 +262,22 @@ equal_mem_array_ref_p (tree t0, tree t1)
   bool rev0;
   HOST_WIDE_INT off0, sz0, max0;
   tree base0 = get_ref_base_and_extent (t0, &off0, &sz0, &max0, &rev0);
+  if (sz0 == -1
+      || sz0 != max0)
+    return false;
 
   bool rev1;
   HOST_WIDE_INT off1, sz1, max1;
   tree base1 = get_ref_base_and_extent (t1, &off1, &sz1, &max1, &rev1);
+  if (sz1 == -1
+      || sz1 != max1)
+    return false;
+
+  if (rev0 != rev1)
+    return false;
 
-  /* Types were compatible, so these are sanity checks.  */
+  /* Types were compatible, so this is a sanity check.  */
   gcc_assert (sz0 == sz1);
-  gcc_assert (max0 == max1);
-  gcc_assert (rev0 == rev1);
 
   return (off0 == off1) && operand_equal_p (base0, base1, 0);
 }