diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 59a22f1edfc..0a6bf91fa8f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Thu Mar 4 15:00:35 1999 Richard Henderson + + * flow.c (delete_unreachable_blocks): Mark blocks as they + are put on to the worklist, not as they are taken off. + Thu Mar 4 00:05:44 1999 Jeffrey A Law (law@cygnus.com) * function.c (current_function_has_computed_jump): Remove duplicate diff --git a/gcc/flow.c b/gcc/flow.c index 4b08eff05c4..4f661560dcc 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -1466,7 +1466,12 @@ delete_unreachable_blocks () support Fortran alternate entry points. */ for (e = ENTRY_BLOCK_PTR->succ; e ; e = e->succ_next) - *tos++ = e->dest; + { + *tos++ = e->dest; + + /* Mark the block with a handy non-null value. */ + e->dest->aux = e; + } /* Iterate: find everything reachable from what we've already seen. */ @@ -1474,12 +1479,12 @@ delete_unreachable_blocks () { basic_block b = *--tos; - /* Mark the block with a handy non-null value. */ - b->aux = b; - for (e = b->succ; e ; e = e->succ_next) if (!e->dest->aux) - *tos++ = e->dest; + { + *tos++ = e->dest; + e->dest->aux = e; + } } /* Delete all unreachable basic blocks. Count down so that we don't