diff options
author | Filip Kastl <fkastl@suse.cz> | 2025-03-02 06:39:17 +0100 |
---|---|---|
committer | Filip Kastl <fkastl@suse.cz> | 2025-03-02 06:39:17 +0100 |
commit | 5349aa2accdf34a7bf9cabd1447878aaadfc0e87 (patch) | |
tree | 0df81b7f14a2e83cbbea0cd687c12f0f089acc41 /gcc/tree-loop-distribution.cc | |
parent | 88e620c8d55a889c33e12b218cd51a3e6ac5011d (diff) | |
download | gcc-5349aa2accdf34a7bf9cabd1447878aaadfc0e87.zip gcc-5349aa2accdf34a7bf9cabd1447878aaadfc0e87.tar.gz gcc-5349aa2accdf34a7bf9cabd1447878aaadfc0e87.tar.bz2 |
gimple: sccopy: Prune removed statements from SCCs [PR117919]
While writing the sccopy pass I didn't realize that 'replace_uses_by ()' can
remove portions of the CFG. This happens when replacing arguments of some
statement results in the removal of an EH edge. Because of this sccopy can
then work with GIMPLE statements that aren't part of the IR anymore. In
PR117919 this triggered an assertion within the pass which assumes that
statements the pass works with are reachable.
This patch tells the pass to notice when a statement isn't in the IR anymore
and remove it from it's worklist.
PR tree-optimization/117919
gcc/ChangeLog:
* gimple-ssa-sccopy.cc (scc_copy_prop::propagate): Prune
statements that 'replace_uses_by ()' removed.
gcc/testsuite/ChangeLog:
* g++.dg/pr117919.C: New test.
Signed-off-by: Filip Kastl <fkastl@suse.cz>
Diffstat (limited to 'gcc/tree-loop-distribution.cc')
0 files changed, 0 insertions, 0 deletions