From e46587281e54e3a8f1eedd70bc322b53cb1fbdcd Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Mon, 18 Aug 2008 15:36:15 +0000 Subject: [PATCH] tree-ssa-reassoc.c (reassociate_bb): Properly reset the statement iterator after statement removal. 2008-08-18 Richard Guenther * tree-ssa-reassoc.c (reassociate_bb): Properly reset the statement iterator after statement removal. From-SVN: r139201 --- gcc/ChangeLog | 5 +++++ gcc/tree-ssa-reassoc.c | 12 ++++++++++++ 2 files changed, 17 insertions(+) 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; }