diff options
author | Mark Mitchell <mark@codesourcery.com> | 1999-09-07 15:20:58 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1999-09-07 15:20:58 +0000 |
commit | 21cd906efe356578356ec1c36841629951681b44 (patch) | |
tree | ebef7e81648f072e4f956a33a801979f7a35c649 /gcc/toplev.c | |
parent | 498ffa68acb51d998126df401a801b8cdf55f152 (diff) | |
download | gcc-21cd906efe356578356ec1c36841629951681b44.zip gcc-21cd906efe356578356ec1c36841629951681b44.tar.gz gcc-21cd906efe356578356ec1c36841629951681b44.tar.bz2 |
emit-rtl.c (free_emit_status): Take decl as a parameter.
* emit-rtl.c (free_emit_status): Take decl as a parameter.
(init_emit_once): Add more GC roots.
* except.c (mark_func_eh_entry): New function.
(mark_eh_node): Mark false_label and rethrow_label.
(init_eh): Add more GC roots.
* function.c (free_after_compilation): Take decl as a paramter.
Call free_stmt_status.
(mark_function_state): Don't assume x_parm_reg_stack_loc is
non-NULL.
* function.h (free_after_compilation): Change prototype.
(free_varasm_status): Likewise.
(free_emit_status): Likewise.
(free_stmt_status): New function.
* ggc-simple.c (rtx, vecs, trees, strings, bytes_alloced_since_gc):
Remove, replacing with ...
(ggc_status): New structure.
(ggc_chain): New variable.
(init_gcc): Define.
(ggc_push_context): New function.
(ggc_pop_context): Likewise.
(ggc_alloc_rtx): Adjust for use of ggc_chain.
(ggc_alloc_rtvec): Likewise.
(ggc_alloc_tree): Likewise.
(ggc_alloc_string): Likewise.
(ggc_mark_rtx): Mark NOTE_SOURCE_FILE and NOTE_RANGE_INFO.
(ggc_mark_tree): Give language-dependent code a chance to mark
`x' nodes.
(ggc_mark_tree_varray): Handle empty arrays.
(ggc_collect): Adjust for use of ggc_chain. Clear
bytes_alloced_since_last_gc.
* ggc.h (ggc_pop_context): New function.
(ggc_push_context): Likewise.
* print-tree.c (print_node): Don't print obstacks when GC'ing.
* stmt.c (free_stmt_status): New function.
(init_stmt_for_function): Clear last_expr_value.
* toplev.c (rest_of_compilation): Always call free_after_compilation.
Conditionalize call to ggc_collect.
(main): Call init_ggc.
* tree.c (push_obstacks): Do the push, even when GC'ing.
(push_obstacks_nochange): Likewise.
(pop_obstacks): Liekwise.
* varasm.c (free_varasm_status): Take decl as a parameter.
From-SVN: r29170
Diffstat (limited to 'gcc/toplev.c')
-rw-r--r-- | gcc/toplev.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/toplev.c b/gcc/toplev.c index 68c7458..73a77bc 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -4466,13 +4466,13 @@ rest_of_compilation (decl) init_recog_no_volatile (); - /* We're done with this function. */ - if (! DECL_DEFER_OUTPUT (decl)) - free_after_compilation (current_function); + /* We're done with this function. Free up memory if we can. */ + free_after_compilation (current_function, decl); current_function = 0; - ggc_collect (); + if (ggc_p) + ggc_collect (); /* The parsing time is all the time spent in yyparse *except* what is spent in this function. */ @@ -4793,6 +4793,9 @@ main (argc, argv) flag_short_enums = DEFAULT_SHORT_ENUMS; #endif + /* Initialize the garbage-collector. */ + if (ggc_p) + init_ggc (); ggc_add_root (&input_file_stack, 1, sizeof input_file_stack, &mark_file_stack); |