aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2000-12-20 17:11:31 -0800
committerRichard Henderson <rth@gcc.gnu.org>2000-12-20 17:11:31 -0800
commit4b01bd1658cc87a0d9a674606b4ae78a3b4594fe (patch)
treeffba52aed7e19dec753b233566b9ab484e11d29e /gcc/flow.c
parent1e248ee3875e64165a8a5c928e175603be975ffa (diff)
downloadgcc-4b01bd1658cc87a0d9a674606b4ae78a3b4594fe.zip
gcc-4b01bd1658cc87a0d9a674606b4ae78a3b4594fe.tar.gz
gcc-4b01bd1658cc87a0d9a674606b4ae78a3b4594fe.tar.bz2
rtl.h (REG_NON_LOCAL_GOTO): New.
* rtl.h (REG_NON_LOCAL_GOTO): New. * rtl.c (reg_note_name): Update. * stmt.c (expand_goto): Emit a REG_NON_LOCAL_GOTO note. * builtins.c (expand_builtin_longjmp): Likewise. * flow.c (make_edges): Check for REG_NON_LOCAL_GOTO and do not emit an edge. From-SVN: r38408
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index ae98448..6137117 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -1094,12 +1094,17 @@ make_edges (label_value_list)
{
rtx tmp;
+ /* Recognize a non-local goto as a branch outside the
+ current function. */
+ if (find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX))
+ ;
+
/* ??? Recognize a tablejump and do the right thing. */
- if ((tmp = JUMP_LABEL (insn)) != NULL_RTX
- && (tmp = NEXT_INSN (tmp)) != NULL_RTX
- && GET_CODE (tmp) == JUMP_INSN
- && (GET_CODE (PATTERN (tmp)) == ADDR_VEC
- || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC))
+ else if ((tmp = JUMP_LABEL (insn)) != NULL_RTX
+ && (tmp = NEXT_INSN (tmp)) != NULL_RTX
+ && GET_CODE (tmp) == JUMP_INSN
+ && (GET_CODE (PATTERN (tmp)) == ADDR_VEC
+ || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC))
{
rtvec vec;
int j;