aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-07-28 14:11:30 -0700
committerRichard Henderson <rth@gcc.gnu.org>2005-07-28 14:11:30 -0700
commit2c97f8e4f318d3e2e0c745078cd7e3c813a2a1c8 (patch)
treefaf9d9e49493f44b6b14fc21e9cf9bf92c2d6fa5
parentb188ebb19e8447d549511c56da590629b32f733a (diff)
downloadgcc-2c97f8e4f318d3e2e0c745078cd7e3c813a2a1c8.zip
gcc-2c97f8e4f318d3e2e0c745078cd7e3c813a2a1c8.tar.gz
gcc-2c97f8e4f318d3e2e0c745078cd7e3c813a2a1c8.tar.bz2
cfgrtl.c (rtl_merge_blocks): Call maybe_remove_eh_handler on labels we want to delete.
* cfgrtl.c (rtl_merge_blocks): Call maybe_remove_eh_handler on labels we want to delete. (cfg_layout_merge_blocks): Likewise. From-SVN: r102512
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgrtl.c12
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 46d1a4d..495a756 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2005-07-28 Richard Henderson <rth@redhat.com>
+ * cfgrtl.c (rtl_merge_blocks): Call maybe_remove_eh_handler on
+ labels we want to delete.
+ (cfg_layout_merge_blocks): Likewise.
+
+2005-07-28 Richard Henderson <rth@redhat.com>
+
PR target/17692
* config/i386/i386.c (ix86_split_sse_movcc): Emit DELETED note
when expanding to nothing.
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 30290d4..e39b196 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -539,6 +539,10 @@ rtl_merge_blocks (basic_block a, basic_block b)
/* If there was a CODE_LABEL beginning B, delete it. */
if (LABEL_P (b_head))
{
+ /* This might have been an EH label that no longer has incoming
+ EH edges. Update data structures to match. */
+ maybe_remove_eh_handler (b_head);
+
/* Detect basic blocks with nothing but a label. This can happen
in particular at the end of a function. */
if (b_head == b_end)
@@ -2733,7 +2737,13 @@ cfg_layout_merge_blocks (basic_block a, basic_block b)
/* If there was a CODE_LABEL beginning B, delete it. */
if (LABEL_P (BB_HEAD (b)))
- delete_insn (BB_HEAD (b));
+ {
+ /* This might have been an EH label that no longer has incoming
+ EH edges. Update data structures to match. */
+ maybe_remove_eh_handler (BB_HEAD (b));
+
+ delete_insn (BB_HEAD (b));
+ }
/* We should have fallthru edge in a, or we can do dummy redirection to get
it cleaned up. */