gimple: sccopy: Don't increment i after vec::unordered_remove()

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>
This commit is contained in:
Filip Kastl 2025-03-20 11:54:59 +01:00
parent 7cc40201a1
commit a1363f8dd8

View 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 ();