re PR tree-optimization/81546 (ICE at -O3 during GIMPLE pass dom)
authorRichard Biener <rguenther@suse.de>
Tue, 25 Jul 2017 11:05:55 +0000 (11:05 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 25 Jul 2017 11:05:55 +0000 (11:05 +0000)
2017-07-25  Richard Biener  <rguenther@suse.de>

PR middle-end/81546
* tree-ssa-operands.c (verify_imm_links): Remove cap on number
of immediate uses, be more verbose on errors.

From-SVN: r250505

gcc/ChangeLog
gcc/tree-ssa-operands.c

index 880b10e2955cd0b400f22d1540d3092597a1e0ef..ed281e8e2b466898ad9cfce86c570b0650a89391 100644 (file)
@@ -1,3 +1,9 @@
+2017-07-25  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/81546
+       * tree-ssa-operands.c (verify_imm_links): Remove cap on number
+       of immediate uses, be more verbose on errors.
+
 2017-07-25  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/81510
index fb843afcec0c70119201a5d8859b4e2c2dc3c3f5..ed80442031eb4975bfc7fb4ab58a6fcc45d9758e 100644 (file)
@@ -1139,7 +1139,7 @@ DEBUG_FUNCTION bool
 verify_imm_links (FILE *f, tree var)
 {
   use_operand_p ptr, prev, list;
-  int count;
+  unsigned int count;
 
   gcc_assert (TREE_CODE (var) == SSA_NAME);
 
@@ -1157,20 +1157,31 @@ verify_imm_links (FILE *f, tree var)
   for (ptr = list->next; ptr != list; )
     {
       if (prev != ptr->prev)
-       goto error;
+       {
+         fprintf (f, "prev != ptr->prev\n");
+         goto error;
+       }
 
       if (ptr->use == NULL)
-       goto error; /* 2 roots, or SAFE guard node.  */
+       {
+         fprintf (f, "ptr->use == NULL\n");
+         goto error; /* 2 roots, or SAFE guard node.  */
+       }
       else if (*(ptr->use) != var)
-       goto error;
+       {
+         fprintf (f, "*(ptr->use) != var\n");
+         goto error;
+       }
 
       prev = ptr;
       ptr = ptr->next;
 
-      /* Avoid infinite loops.  50,000,000 uses probably indicates a
-        problem.  */
-      if (count++ > 50000000)
-       goto error;
+      count++;
+      if (count == 0)
+       {
+         fprintf (f, "number of immediate uses doesn't fit unsigned int\n");
+         goto error;
+       }
     }
 
   /* Verify list in the other direction.  */
@@ -1178,15 +1189,25 @@ verify_imm_links (FILE *f, tree var)
   for (ptr = list->prev; ptr != list; )
     {
       if (prev != ptr->next)
-       goto error;
+       {
+         fprintf (f, "prev != ptr->next\n");
+         goto error;
+       }
       prev = ptr;
       ptr = ptr->prev;
-      if (count-- < 0)
-       goto error;
+      if (count == 0)
+       {
+         fprintf (f, "count-- < 0\n");
+         goto error;
+       }
+      count--;
     }
 
   if (count != 0)
-    goto error;
+    {
+      fprintf (f, "count != 0\n");
+      goto error;
+    }
 
   return false;