Hi!

Bootstrap failed with go enabled at least on i686-linux for the last day
or so, some changes in libgo crypto apparently started triggering a
recently introduced problem in replace_uses_by.  fold_stmt isn't the
only way a stmt can be changed by replace_uses_by, in the sha1.go
case replace_exp changed *tmp_8[i_10] = something; which because
of -fnon-call-exceptions was considered stmt_could_throw_p into
*tmp_8[0] = something; which can't throw, but maybe_clean_or_replace_eh_stmt
would be called only if fold_stmt returned non-zero.
Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
committed to trunk as obvious.

2011-12-16  Jakub Jelinek  <ja...@redhat.com>

        PR tree-optimization/51576
        * tree-cfg.c (replace_uses_by): Call maybe_clean_or_replace_eh_stmt
        even if fold_stmt didn't change anything.

--- gcc/tree-cfg.c.jj   2011-12-15 08:06:54.000000000 +0100
+++ gcc/tree-cfg.c      2011-12-16 12:10:00.350503019 +0100
@@ -1625,10 +1625,9 @@ replace_uses_by (tree name, tree val)
              }
 
          if (fold_stmt (&gsi))
-           {
-             stmt = gsi_stmt (gsi);
-             maybe_clean_or_replace_eh_stmt (orig_stmt, stmt);
-           }
+           stmt = gsi_stmt (gsi);
+
+         maybe_clean_or_replace_eh_stmt (orig_stmt, stmt);
 
          update_stmt (stmt);
        }

        Jakub

Reply via email to