From: Jan Hubicka Date: Thu, 26 Aug 2021 19:37:46 +0000 (+0200) Subject: Fix ipa-modref verification ices X-Git-Tag: basepoints/gcc-13~5143 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=352d5e85a7060cd0e069d81c61b22ca3d16ffc49;p=thirdparty%2Fgcc.git Fix ipa-modref verification ices * ipa-modref-tree.h (modref_access_node::try_merge_with): Restart search after merging. --- diff --git a/gcc/ipa-modref-tree.h b/gcc/ipa-modref-tree.h index 97934a91adaf..a86e684a030a 100644 --- a/gcc/ipa-modref-tree.h +++ b/gcc/ipa-modref-tree.h @@ -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++; } };