summaryrefslogtreecommitdiffstats
path: root/gcc/except.c
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2001-05-17 18:12:27 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2001-05-17 18:12:27 +0000
commit49ee78f13998d92643029567ee7705b20a529637 (patch)
treeea2ee85a1a8e761513f6ee751bb994a2aeee2dd0 /gcc/except.c
parentb52a90a73903c31a0ee6423fa3db6d6afdf780af (diff)
downloadppe42-gcc-49ee78f13998d92643029567ee7705b20a529637.tar.gz
ppe42-gcc-49ee78f13998d92643029567ee7705b20a529637.zip
* except.h (protect_cleanup_actions): Remove it.
(lang_protect_cleanup_actions): Declare it. * except.c (protect_cleanup_actions): Remove it. (lang_protect_cleanup_actions): New variable. (init_eh): Don't make protect_cleanup_actions a GC root. (expand_eh_region_and_cleanup): Call lang_protect_cleanup_actions. (output_function_exception_table): Remove unused `align' variable. * varasm.c (assemble_external): Abort if we have not yet opened the assembly output file. * except.c (cp_protect_cleanup_actions): New function. (init_exception_processing): Don't set protect_cleanup_actions here. Do set lang_protect_cleanup_actions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42218 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/except.c')
-rw-r--r--gcc/except.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/except.c b/gcc/except.c
index 35d76cb8a82..48efbf9b8fc 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -88,7 +88,7 @@ int flag_non_call_exceptions;
/* Protect cleanup actions with must-not-throw regions, with a call
to the given failure handler. */
-tree protect_cleanup_actions;
+tree (*lang_protect_cleanup_actions) PARAMS ((void));
/* Return true if type A catches type B. */
int (*lang_eh_type_covers) PARAMS ((tree a, tree b));
@@ -367,7 +367,6 @@ void
init_eh ()
{
ggc_add_rtx_root (&exception_handler_labels, 1);
- ggc_add_tree_root (&protect_cleanup_actions, 1);
if (! flag_exceptions)
return;
@@ -691,6 +690,7 @@ expand_eh_region_end_cleanup (handler)
tree handler;
{
struct eh_region *region;
+ tree protect_cleanup_actions;
rtx around_label;
rtx data_save[2];
@@ -707,6 +707,13 @@ expand_eh_region_end_cleanup (handler)
emit_label (region->label);
+ /* Give the language a chance to specify an action to be taken if an
+ exception is thrown that would propogate out of the HANDLER. */
+ protect_cleanup_actions
+ = (lang_protect_cleanup_actions
+ ? (*lang_protect_cleanup_actions) ()
+ : NULL_TREE);
+
if (protect_cleanup_actions)
expand_eh_region_start ();
OpenPOWER on IntegriCloud