aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index 27409de..8311566 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -574,7 +574,11 @@ 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. */
+ 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. */
for (note = REG_NOTES (insn);
note;
note = XEXP (note, 1))
@@ -586,6 +590,14 @@ 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);
}
}