aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-07-25 12:59:39 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-07-25 12:59:39 -0700
commit7f206d8f42ecbe874b67712a5994dc4459ca4795 (patch)
tree81776281a5b49fa724e3261fe61abe19f6a66d5f /gcc
parent2c938d4292ac41e4c753763ba8ef7e1c5d4892de (diff)
downloadgcc-7f206d8f42ecbe874b67712a5994dc4459ca4795.zip
gcc-7f206d8f42ecbe874b67712a5994dc4459ca4795.tar.gz
gcc-7f206d8f42ecbe874b67712a5994dc4459ca4795.tar.bz2
except.c (reachable_handlers): Handle a region being removed out from under a RESX.
* except.c (reachable_handlers): Handle a region being removed out from under a RESX. From-SVN: r44363
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/except.c14
2 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3e9f613..973a821 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2001-07-25 Richard Henderson <rth@redhat.com>
+ * except.c (reachable_handlers): Handle a region being removed
+ out from under a RESX.
+
+2001-07-25 Richard Henderson <rth@redhat.com>
+
* config/alpha/alpha.c (alpha_emit_conditional_move): Always
swap GE/GT if its an fp comparison.
diff --git a/gcc/except.c b/gcc/except.c
index 01e83f0..b45237c 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -2728,14 +2728,20 @@ reachable_handlers (insn)
region = cfun->eh->region_array[region_number];
type_thrown = NULL_TREE;
- if (region->type == ERT_THROW)
+ if (GET_CODE (insn) == JUMP_INSN
+ && GET_CODE (PATTERN (insn)) == RESX)
+ {
+ /* A RESX leaves a region instead of entering it. Thus the
+ region itself may have been deleted out from under us. */
+ if (region == NULL)
+ return NULL;
+ region = region->outer;
+ }
+ else if (region->type == ERT_THROW)
{
type_thrown = region->u.throw.type;
region = region->outer;
}
- else if (GET_CODE (insn) == JUMP_INSN
- && GET_CODE (PATTERN (insn)) == RESX)
- region = region->outer;
for (; region; region = region->outer)
if (reachable_next_level (region, type_thrown, &info) >= RNL_CAUGHT)