tree-ssa-propagate.c (substitute_and_fold): Fix stmt walking on deletion of the last...
authorRichard Guenther <rguenther@suse.de>
Fri, 16 May 2008 08:38:12 +0000 (08:38 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 16 May 2008 08:38:12 +0000 (08:38 +0000)
2008-05-16  Richard Guenther  <rguenther@suse.de>

* tree-ssa-propagate.c (substitute_and_fold): Fix stmt walking
on deletion of the last stmt.

From-SVN: r135412

gcc/ChangeLog
gcc/tree-ssa-propagate.c

index 77b9620b0590e285dc8098904dae107c5da0d815..71edc978a2f9879ad083a9836535a1ea41266941 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-16  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-propagate.c (substitute_and_fold): Fix stmt walking
+       on deletion of the last stmt.
+
 2008-05-15  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config/i386/i386.c (ix86_expand_vector_init_general): Optimize
index 1b40bf095ed5b425a22a8177bd1a815af613f825..728a709c64c139d1bb23231d3051a3fcffa0689c 100644 (file)
@@ -1250,6 +1250,7 @@ substitute_and_fold (prop_value_t *prop_value, bool use_ranges_p)
              && (!(call = get_call_expr_in (stmt))
                  || !TREE_SIDE_EFFECTS (call)))
            {
+             block_stmt_iterator i2;
              if (dump_file && dump_flags & TDF_DETAILS)
                {
                  fprintf (dump_file, "Removing dead stmt ");
@@ -1257,10 +1258,10 @@ substitute_and_fold (prop_value_t *prop_value, bool use_ranges_p)
                  fprintf (dump_file, "\n");
                }
              prop_stats.num_dce++;
-             bsi_remove (&i, true);
+             bsi_prev (&i);
+             i2 = bsi_for_stmt (stmt);
+             bsi_remove (&i2, true);
              release_defs (stmt);
-             if (!bsi_end_p (i))
-               bsi_prev (&i);
              continue;
            }