aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1997-12-04 09:41:38 +0000
committerJason Merrill <jason@gcc.gnu.org>1997-12-04 04:41:38 -0500
commite701eb4de0b60d5ceac3ec4d9be03f7e39a57103 (patch)
tree952b95458e119610c40fb72e6d852f3a40843ba5 /gcc/flow.c
parenta1e343dd7a3f537a038c3903264fa41f9c4df29d (diff)
downloadgcc-e701eb4de0b60d5ceac3ec4d9be03f7e39a57103.zip
gcc-e701eb4de0b60d5ceac3ec4d9be03f7e39a57103.tar.gz
gcc-e701eb4de0b60d5ceac3ec4d9be03f7e39a57103.tar.bz2
./: * libgcc2.c (__throw): Use __builtin_return_addr instead of __eh_pc.
* except.c: Lose outer_context_label_stack. (expand_eh_region_end): Rethrow from outer_context here. (expand_fixup_region_end): Let expand_eh_region_end do the rethrow. (expand_internal_throw): Take no args. (expand_internal_throw_indirect): Lose. (expand_leftover_cleanups, expand_start_all_catch): Use expand_rethrow. (expand_start_all_catch): Start a rethrow region. (expand_end_all_catch): End it. (expand_rethrow): New fn. * except.h: Reflect above changes. cp/: * except.c (expand_end_catch_block): Lose rethrow region. (expand_start_catch_block): Likewise. (expand_end_catch_block): Don't expand_leftover_cleanups. From-SVN: r16937
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c19
1 files changed, 1 insertions, 18 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index 8311566..ed66ce7 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -472,15 +472,10 @@ find_basic_blocks (f, nonlocal_label_list)
/* If we encounter a CALL_INSN, note which exception handler it
might pass control to.
- Because we do rethrows by loading the address of a label into
- __eh_pc and throwing, we need to treat labels as potentially
- jumping to exception handlers.
-
If doing asynchronous exceptions, record the active EH handler
for every insn, since most insns can throw. */
else if (eh_note
&& (asynchronous_exceptions
- || code == CODE_LABEL
|| (GET_CODE (insn) == CALL_INSN
&& ! find_reg_note (insn, REG_RETVAL, NULL_RTX))))
active_eh_handler[INSN_UID (insn)] = XEXP (eh_note, 0);
@@ -574,11 +569,7 @@ find_basic_blocks (f, nonlocal_label_list)
associated insns aren't marked dead, so we make
the block in question live and create an edge from
this insn to the label. This is not strictly
- correct, but it is close enough for now.
-
- We also need to mark the CODE_LABEL as reaching
- its exception handler for nested exceptions to
- to work. */
+ correct, but it is close enough for now. */
for (note = REG_NOTES (insn);
note;
note = XEXP (note, 1))
@@ -590,14 +581,6 @@ find_basic_blocks (f, nonlocal_label_list)
mark_label_ref (gen_rtx (LABEL_REF,
VOIDmode, x),
insn, 0);
-
- /* If the CODE_LABEL has an active exception
- handler, then make an edge to the exception
- handler from this insn. */
- if (active_eh_handler[INSN_UID (x)])
- mark_label_ref (gen_rtx (LABEL_REF, VOIDmode,
- active_eh_handler[INSN_UID (x)]),
- insn, 0);
}
}