]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gimple: sccopy: Don't increment i after vec::unordered_remove()
authorFilip Kastl <fkastl@suse.cz>
Thu, 20 Mar 2025 10:54:59 +0000 (11:54 +0100)
committerFilip Kastl <fkastl@suse.cz>
Thu, 20 Mar 2025 12:32:43 +0000 (13:32 +0100)
I increment the index variable in a loop even when I do
vec::unordered_remove() which causes the vector traversal to miss some
elements.  Mikael notified me of this mistake I made in my last patch.

gcc/ChangeLog:

* gimple-ssa-sccopy.cc (scc_copy_prop::propagate): Don't
increment after vec::unordered_remove().

Reported-by: Mikael Morin <mikael@gcc.gnu.org>
Signed-off-by: Filip Kastl <fkastl@suse.cz>
gcc/gimple-ssa-sccopy.cc

index 298feb0557113853e1ee39c7336998b530fcd9c4..ee2a7fa8a727af878e4c76b231acca205bab679a 100644 (file)
@@ -582,9 +582,11 @@ scc_copy_prop::propagate ()
         get removed.  That means parts of CFG get removed.  Those may
         contain copy statements.  For that reason we prune SCCs here.  */
       unsigned i;
-      for (i = 0; i < scc.length (); i++)
+      for (i = 0; i < scc.length ();)
        if (gimple_bb (scc[i]) == NULL)
          scc.unordered_remove (i);
+       else
+         i++;
       if (scc.is_empty ())
        {
          scc.release ();