aboutsummaryrefslogtreecommitdiff
path: root/gcc/except.c
diff options
context:
space:
mode:
authorBernd Schmidt <crux@pool.informatik.rwth-aachen.de>1998-09-09 21:48:42 +0000
committerJeff Law <law@gcc.gnu.org>1998-09-09 15:48:42 -0600
commitc708eef9868f06b0e70b98da9c440244b23dfb7b (patch)
tree7c1fc5c74cfa08035d86375a446d67f690e81e06 /gcc/except.c
parente1e837810ee2bbfa22c4529a11ebc3a3a66aafbb (diff)
downloadgcc-c708eef9868f06b0e70b98da9c440244b23dfb7b.zip
gcc-c708eef9868f06b0e70b98da9c440244b23dfb7b.tar.gz
gcc-c708eef9868f06b0e70b98da9c440244b23dfb7b.tar.bz2
except.h (current_function_eh_stub_label): Declare.
* except.h (current_function_eh_stub_label): Declare. (current_function_eh_old_stub_label): Declare. * function.h (struct function): New members eh_stub_label and eh_old_stub_label. * except.c (current_function_eh_stub_label): New variable. (current_function_eh_old_stub_label): New variable. (init_eh_for_function): Clear them. (save_eh_status): Save them. (restore_eh_status): Restore them. (expand_builtin_eh_stub): Set current_function_eh_stub_label. (expand_builtin_eh_stub_old): Set current_function_eh_old_stub_label. * flow.c (find_basic_blocks_1): When handling a REG_LABEL note, don't make an edge from the block that contains it to the block starting with the label if this label is one of the eh stub labels. If eh stub labels exist, show they are reachable from the last block in the function. From-SVN: r22369
Diffstat (limited to 'gcc/except.c')
-rw-r--r--gcc/except.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/except.c b/gcc/except.c
index 2d26e9e..5f2c61a 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -431,6 +431,12 @@ rtx exception_handler_labels;
rtx current_function_ehc;
+/* The labels generated by expand_builtin_eh_stub and
+ expand_builtin_eh_stub_old. */
+
+rtx current_function_eh_stub_label;
+rtx current_function_eh_old_stub_label;
+
/* A stack used for keeping track of the currently active exception
handling region. As each exception region is started, an entry
describing the region is pushed onto this stack. The current
@@ -2148,6 +2154,8 @@ init_eh_for_function ()
caught_return_label_stack = 0;
protect_list = NULL_TREE;
current_function_ehc = NULL_RTX;
+ current_function_eh_stub_label = NULL_RTX;
+ current_function_eh_old_stub_label = NULL_RTX;
}
/* Save some of the per-function EH info into the save area denoted by
@@ -2170,6 +2178,8 @@ save_eh_status (p)
p->caught_return_label_stack = caught_return_label_stack;
p->protect_list = protect_list;
p->ehc = current_function_ehc;
+ p->eh_stub_label = current_function_eh_stub_label;
+ p->eh_old_stub_label = current_function_eh_old_stub_label;
init_eh_for_function ();
}
@@ -2193,6 +2203,8 @@ restore_eh_status (p)
ehstack = p->ehstack;
catchstack = p->catchstack;
current_function_ehc = p->ehc;
+ current_function_eh_stub_label = p->eh_stub_label;
+ current_function_eh_old_stub_label = p->eh_old_stub_label;
}
/* This section is for the exception handling specific optimization
@@ -2502,6 +2514,8 @@ expand_builtin_eh_stub_old ()
rtx after_stub = gen_label_rtx ();
rtx handler, offset;
+ current_function_eh_old_stub_label = stub_start;
+
emit_jump (after_stub);
emit_label (stub_start);
@@ -2521,6 +2535,8 @@ expand_builtin_eh_stub ()
rtx handler, offset;
rtx temp;
+ current_function_eh_stub_label = stub_start;
+
emit_jump (after_stub);
emit_label (stub_start);