summaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorzadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4>2005-12-19 02:35:44 +0000
committerzadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4>2005-12-19 02:35:44 +0000
commite8da899121a4f1cebe5a5f5d0eb20d3bb7872600 (patch)
tree0b4ed2d9a152aff6f7733ec523309ca8eb5951d1 /gcc/flow.c
parent8d0d75977027e68d3b6e10bc2481834a9641a29d (diff)
downloadgcc-e8da899121a4f1cebe5a5f5d0eb20d3bb7872600.tar.gz
2005-12-17 Kenneth Zadeck <zadeck@naturalbridge.com>
* flow.c (update_life_info, count_or_remove_death_notes): Fixed latent bug that could happen if update_life_info was called with a blocks parameter and the call to cleanup_cfg actually deleted one of those blocks. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@108777 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index 436bfd7b29b..ca2f1e14f6b 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -658,12 +658,16 @@ update_life_info (sbitmap blocks, enum update_life_extent extent,
EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i, sbi)
{
bb = BASIC_BLOCK (i);
-
- COPY_REG_SET (tmp, bb->il.rtl->global_live_at_end);
- propagate_block (bb, tmp, NULL, NULL, stabilized_prop_flags);
-
- if (extent == UPDATE_LIFE_LOCAL)
- verify_local_live_at_start (tmp, bb);
+ if (bb)
+ {
+ /* The bitmap may be flawed in that one of the basic
+ blocks may have been deleted before you get here. */
+ COPY_REG_SET (tmp, bb->il.rtl->global_live_at_end);
+ propagate_block (bb, tmp, NULL, NULL, stabilized_prop_flags);
+
+ if (extent == UPDATE_LIFE_LOCAL)
+ verify_local_live_at_start (tmp, bb);
+ }
};
}
else
@@ -4456,7 +4460,11 @@ count_or_remove_death_notes (sbitmap blocks, int kill)
EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i, sbi)
{
- count += count_or_remove_death_notes_bb (BASIC_BLOCK (i), kill);
+ basic_block bb = BASIC_BLOCK (i);
+ /* The bitmap may be flawed in that one of the basic blocks
+ may have been deleted before you get here. */
+ if (bb)
+ count += count_or_remove_death_notes_bb (bb, kill);
};
}
else