diff options
author | Jason Merrill <jason@yorick.cygnus.com> | 1997-12-04 09:41:38 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 1997-12-04 04:41:38 -0500 |
commit | e701eb4de0b60d5ceac3ec4d9be03f7e39a57103 (patch) | |
tree | 952b95458e119610c40fb72e6d852f3a40843ba5 /gcc/flow.c | |
parent | a1e343dd7a3f537a038c3903264fa41f9c4df29d (diff) | |
download | gcc-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.c | 19 |
1 files changed, 1 insertions, 18 deletions
@@ -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); } } |