diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2f49559479c..38d137ff51d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-08-18 Richard Guenther + + * tree-ssa-reassoc.c (reassociate_bb): Properly reset the + statement iterator after statement removal. + 2008-08-18 Andreas Tobler * config/rs6000/driver-rs6000.c (detect_caches_freebsd): New function. diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index be68331faf2..e4e7db69d2e 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -1771,6 +1771,18 @@ reassociate_bb (basic_block bb) { gsi_remove (&gsi, true); release_defs (stmt); + /* We might end up removing the last stmt above which + places the iterator to the end of the sequence. + Reset it to the last stmt in this case which might + be the end of the sequence as well if we removed + the last statement of the sequence. In which case + we need to bail out. */ + if (gsi_end_p (gsi)) + { + gsi = gsi_last_bb (bb); + if (gsi_end_p (gsi)) + break; + } } continue; }