http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52045

--- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-01-30 
12:25:02 UTC ---
This is a case similar to PR22037, see execute_function_todo, passes calling
cleanup_tree_cfg need to expect to update SSA form.

      bool cleanup = cleanup_tree_cfg ();

      if (cleanup && (cfun->curr_properties & PROP_ssa))
        flags |= TODO_remove_unused_locals;

      /* When cleanup_tree_cfg merges consecutive blocks, it may
         perform some simplistic propagation when removing single
         valued PHI nodes.  This propagation may, in turn, cause the
         SSA form to become out-of-date (see PR 22037).  So, even
         if the parent pass had not scheduled an SSA update, we may
         still need to do one.  */
      if (!(flags & TODO_update_ssa_any) && need_ssa_update_p (cfun))
        flags |= TODO_update_ssa;

the reasoning here is similar.

Index: gcc/tree-optimize.c
===================================================================
--- gcc/tree-optimize.c (revision 183695)
+++ gcc/tree-optimize.c (working copy)
@@ -157,7 +157,9 @@ struct gimple_opt_pass pass_all_early_op
 static unsigned int
 execute_cleanup_cfg_post_optimizing (void)
 {
-  cleanup_tree_cfg ();
+  unsigned int todo = 0;
+  if (cleanup_tree_cfg ())
+    todo |= TODO_update_ssa;
   maybe_remove_unreachable_handlers ();
   cleanup_dead_labels ();
   group_case_labels ();
@@ -190,7 +192,7 @@ execute_cleanup_cfg_post_optimizing (voi
            }
        }
     }
-  return 0;
+  return todo;
 }

 struct gimple_opt_pass pass_cleanup_cfg_post_optimizing =

Reply via email to