]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix ipa-modref verification ices
authorJan Hubicka <hubicka@ucw.cz>
Thu, 26 Aug 2021 19:37:46 +0000 (21:37 +0200)
committerJan Hubicka <hubicka@ucw.cz>
Thu, 26 Aug 2021 19:37:46 +0000 (21:37 +0200)
* ipa-modref-tree.h (modref_access_node::try_merge_with): Restart
search after merging.

gcc/ipa-modref-tree.h

index 97934a91adaf95a6b61a06abb60db1fe966c8c0f..a86e684a030a8131413ab10932766ef1af4d4e09 100644 (file)
@@ -405,20 +405,35 @@ private:
   void
   try_merge_with (size_t index)
   {
-    modref_access_node *a2;
     size_t i;
 
-    FOR_EACH_VEC_SAFE_ELT (accesses, i, a2)
-      if (i != index
-         && ((*accesses)[index].contains (*a2)
-             || (*accesses)[index].merge (*a2, false)))
+    for (i = 0; i < accesses->length ();)
+      if (i != index)
        {
-         accesses->unordered_remove (i);
-         if (index == accesses->length ())
-           index = i;
+         bool found = false, restart = false;
+         modref_access_node *a = &(*accesses)[i];
+         modref_access_node *n = &(*accesses)[index];
+
+         if (n->contains (*a))
+           found = true;
+         if (!found && n->merge (*a, false))
+           found = restart = true;
+         if (found)
+           {
+             accesses->unordered_remove (i);
+             if (index == accesses->length ())
+               {
+                 index = i;
+                 i++;
+               }
+             if (restart)
+               i = 0;
+           }
          else
-           i--;
+           i++;
        }
+      else
+       i++;
   }
 };