[gcc/devel/omp/gcc-14] gimple: sccopy: Don't increment i after vec::unordered_remove()
Tobias Burnus
burnus@gcc.gnu.org
Fri Mar 21 23:42:55 GMT 2025
https://gcc.gnu.org/g:4e7772294074b78a4f06061ed53c605d8c98bbeb
commit 4e7772294074b78a4f06061ed53c605d8c98bbeb
Author: Filip Kastl <fkastl@suse.cz>
Date: Thu Mar 20 11:54:59 2025 +0100
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>
(cherry picked from commit a1363f8dd8037d40e9fbf04c2ba8d6d3e7e5c269)
Diff:
---
gcc/gimple-ssa-sccopy.cc | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/gcc/gimple-ssa-sccopy.cc b/gcc/gimple-ssa-sccopy.cc
index d4d06f3b13e7..f7e121992e5f 100644
--- a/gcc/gimple-ssa-sccopy.cc
+++ b/gcc/gimple-ssa-sccopy.cc
@@ -554,9 +554,11 @@ sccopy_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 ();
More information about the Gcc-cvs
mailing list