summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-reassoc.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-08-18 15:36:15 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-08-18 15:36:15 +0000
commite46587281e54e3a8f1eedd70bc322b53cb1fbdcd (patch)
tree0dbbbb43b073bfe9473ff5176b4bb98c84ecdbed /gcc/tree-ssa-reassoc.c
parent5289e80852bb30d7e6afd90ea77ad1ed66d30bc7 (diff)
downloadgcc-e46587281e54e3a8f1eedd70bc322b53cb1fbdcd.tar.gz
tree-ssa-reassoc.c (reassociate_bb): Properly reset the statement iterator after statement removal.
2008-08-18 Richard Guenther <rguenther@suse.de> * tree-ssa-reassoc.c (reassociate_bb): Properly reset the statement iterator after statement removal. From-SVN: r139201
Diffstat (limited to 'gcc/tree-ssa-reassoc.c')
-rw-r--r--gcc/tree-ssa-reassoc.c12
1 files changed, 12 insertions, 0 deletions
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;
}