diff options
author | Jeffrey A Law <law@cygnus.com> | 1997-11-28 03:10:10 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1997-11-27 20:10:10 -0700 |
commit | 586a5f993abceb8ea62bdd39f2e0875ee11baace (patch) | |
tree | fe626edb31fdadc207e3664c4d884ecc148464d3 /gcc/flow.c | |
parent | c2840dfb8acc1944b5adcb49108ab5cd99bed5e4 (diff) | |
download | gcc-586a5f993abceb8ea62bdd39f2e0875ee11baace.zip gcc-586a5f993abceb8ea62bdd39f2e0875ee11baace.tar.gz gcc-586a5f993abceb8ea62bdd39f2e0875ee11baace.tar.bz2 |
flow.c (find_basic_blocks): Handle cfg issues for rethrows and nested exceptions correctly.
* flow.c (find_basic_blocks): Handle cfg issues for rethrows and
nested exceptions correctly.
From-SVN: r16812
Diffstat (limited to 'gcc/flow.c')
-rw-r--r-- | gcc/flow.c | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -472,10 +472,15 @@ 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); |