diff options
author | Richard Henderson <rth@cygnus.com> | 1999-09-15 18:12:25 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 1999-09-15 18:12:25 -0700 |
commit | fa51b01b556abeccf484335aad120f6dc9e68861 (patch) | |
tree | 0b720d86986661e0024880e115976d9fa928b8f1 /gcc/except.c | |
parent | 637194e69a20cab4a299af8c9706e67a6724f215 (diff) | |
download | gcc-fa51b01b556abeccf484335aad120f6dc9e68861.zip gcc-fa51b01b556abeccf484335aad120f6dc9e68861.tar.gz gcc-fa51b01b556abeccf484335aad120f6dc9e68861.tar.bz2 |
emit-rtl.c (free_emit_status): Don't check DECL_DEFER_OUTPUT.
* emit-rtl.c (free_emit_status): Don't check DECL_DEFER_OUTPUT.
Free the struct.
(mark_emit_status): Renamed from mark_emit_state.
* except.c (mark_eh_status): Renamed from mark_eh_state.
Check not null before marking.
(free_eh_status): New.
* expr.c (mark_expr_status, free_expr_status): New.
* function.c (free_machine_status): New.
(free_after_parsing): New.
(free_after_compilation): Move bits to free_after_parsing; call
free_eh_status, free_expr_status; zero the marked members of the
function state.
(prepare_function_start): No can_garbage_collect.
Call init_eh_for_function.
(expand_dummy_function_end): Free up current_function state.
(mark_function_status): Renamed from mark_function_state.
(mark_function_chain): No can_garbage_collect. Call mark_expr_status.
* function.h (struct function): No can_garbage_collect.
(free_machine_status, free_after_parsing): Declare.
(free_eh_status, free_expr_status): Declare.
* ggc.h (mark_expr_status): Declare.
* stmt.c (free_stmt_status): Free the struct.
(mark_stmt_status): Renamed from mark_stmt_state.
(init_stmt): Don't call init_eh.
(init_stmt_for_function): Don't call init_eh_for_function.
* toplev.c (compile_file): Call init_eh.
(rest_of_compilation): Free basic block info before ggc_collect.
Call free_after_parsing; conditionally call free_after_compilation.
* varasm.c (mark_varasm_status): Renamed from mark_varasm_state.
Check not null before marking.
From-SVN: r29448
Diffstat (limited to 'gcc/except.c')
-rw-r--r-- | gcc/except.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/except.c b/gcc/except.c index 9a190c7..f063c9a 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -2405,9 +2405,12 @@ mark_tree_label_node (node) /* Mark EH for GC. */ void -mark_eh_state (eh) +mark_eh_status (eh) struct eh_status *eh; { + if (eh == 0) + return; + mark_eh_stack (&eh->x_ehstack); mark_eh_stack (&eh->x_catchstack); mark_eh_queue (&eh->x_ehqueue); @@ -2479,7 +2482,8 @@ init_eh () void init_eh_for_function () { - current_function->eh = (struct eh_status *) xmalloc (sizeof (struct eh_status)); + current_function->eh + = (struct eh_status *) xmalloc (sizeof (struct eh_status)); ehstack.top = 0; catchstack.top = 0; @@ -2494,6 +2498,14 @@ init_eh_for_function () eh_return_handler = NULL_RTX; eh_return_stub_label = NULL_RTX; } + +void +free_eh_status (f) + struct function *f; +{ + free (f->eh); + f->eh = NULL; +} /* This section is for the exception handling specific optimization pass. First are the internal routines, and then the main |