diff --git a/gcc/ChangeLog b/gcc/ChangeLog index acb109e29ede526bf93a53a3b05d3f3345d5a2b0..f458ac7b176f6487c43c29357efafe7c3fafbbf4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2007-02-04 Zdenek Dvorak <dvorakz@suse.cz> + + * cfgcleanup.c (try_optimize_cfg): Avoid removing ENTRY_BLOCK_PTR. + 2007-02-04 Zdenek Dvorak <dvorakz@suse.cz> * cfgloopmanip.c (loop_delete_branch_edge): Removed. @@ -43,7 +47,7 @@ * passes.c (init_optimization_passes): Reindent. 2007-02-04 Jan Hubicka <jh@suse.cz> - Eric Botcazou <ebotcazou@adacore.com> + Eric Botcazou <ebotcazou@adacore.com> * tree-optimize.c (has_abnormal_outgoing_edge_p): Move to... (execute_fixup_cfg): Break out the abnormal goto code. diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index 7c5b745a65067aa795050be7f7706fd5acd4260f..ee5c69bd2e6a3ec601e2b354cbb2d000e38086b5 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -1992,7 +1992,7 @@ try_optimize_cfg (int mode) bool changed_here = false; /* Delete trivially dead basic blocks. */ - while (EDGE_COUNT (b->preds) == 0) + if (EDGE_COUNT (b->preds) == 0) { c = b->prev_bb; if (dump_file) @@ -2002,7 +2002,9 @@ try_optimize_cfg (int mode) delete_basic_block (b); if (!(mode & CLEANUP_CFGLAYOUT)) changed = true; - b = c; + /* Avoid trying to remove ENTRY_BLOCK_PTR. */ + b = (c == ENTRY_BLOCK_PTR ? c->next_bb : c); + continue; } /* Remove code labels no longer used. */