From 7f206d8f42ecbe874b67712a5994dc4459ca4795 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 25 Jul 2001 12:59:39 -0700 Subject: 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 --- gcc/except.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'gcc/except.c') 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) -- cgit v1.1