https://gcc.gnu.org/g:84ab2358609dbbbb45c06c67b57d2d988457f398

commit r17-1252-g84ab2358609dbbbb45c06c67b57d2d988457f398
Author: Richard Sandiford <[email protected]>
Date:   Wed Jun 3 11:04:15 2026 +0100

    backprop: Avoid double deletions [PR125579]
    
    In this PR, two values were simplified to the same phi, which in
    turn was made redundant by other simplifications.  The pass then
    tried to delete the phi twice.
    
    gcc/
            PR tree-optimization/125579
            * gimple-ssa-backprop.cc (backprop::execute): Avoid double 
deletions.
    
    gcc/testsuite/
            PR tree-optimization/125579
            * gcc.dg/pr125579.c: New test.

Diff:
---
 gcc/gimple-ssa-backprop.cc      |  4 +++-
 gcc/testsuite/gcc.dg/pr125579.c | 16 ++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/gcc/gimple-ssa-backprop.cc b/gcc/gimple-ssa-backprop.cc
index 61ceb88ec89f..5d7295c9d8ed 100644
--- a/gcc/gimple-ssa-backprop.cc
+++ b/gcc/gimple-ssa-backprop.cc
@@ -1119,10 +1119,12 @@ backprop::execute ()
        commit_replacement (v);
 
   /* Phase 5: Remove any statements that might have become dead.  */
+  auto_bitmap deleted_vars;
   for (unsigned int i = 0; i < m_vars.length (); ++i)
     if (var_info *v = m_vars[i])
       if (TREE_CODE (v->new_value) == SSA_NAME
-         && has_zero_uses (v->new_value))
+         && has_zero_uses (v->new_value)
+         && bitmap_set_bit (deleted_vars, SSA_NAME_VERSION (v->new_value)))
        {
          gimple *stmt = SSA_NAME_DEF_STMT (v->new_value);
          gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
diff --git a/gcc/testsuite/gcc.dg/pr125579.c b/gcc/testsuite/gcc.dg/pr125579.c
new file mode 100644
index 000000000000..1293d4d91f9a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr125579.c
@@ -0,0 +1,16 @@
+/* { dg-options "-w -O3 -fno-tree-ccp -fno-inline" } */
+
+int printf(const char *, ...);
+int a;
+void c(int d) {
+  unsigned e = 0;
+  if (a)
+    e = -(0 / (e * 0));
+  while (a) {
+    if (d)
+      continue;
+    printf("%d", e);
+    e++;
+  }
+}
+int main() { c(1); }

Reply via email to