summaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>1999-09-16 01:12:25 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>1999-09-16 01:12:25 +0000
commit3c3bb26851dc0028e761a92256ad356cb3644b7a (patch)
tree0b720d86986661e0024880e115976d9fa928b8f1 /gcc/expr.c
parentf45c08bf71c972d86b29e21a3c7b32c9ce41a616 (diff)
downloadgcc-3c3bb26851dc0028e761a92256ad356cb3644b7a.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@29448 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index c51a97a93f4..daa06d0e849 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -290,6 +290,26 @@ init_expr ()
forced_labels = 0;
}
+void
+mark_expr_status (p)
+ struct expr_status *p;
+{
+ if (p == NULL)
+ return;
+
+ ggc_mark_rtx (p->x_saveregs_value);
+ ggc_mark_rtx (p->x_apply_args_value);
+ ggc_mark_rtx (p->x_forced_labels);
+}
+
+void
+free_expr_status (f)
+ struct function *f;
+{
+ free (f->expr);
+ f->expr = NULL;
+}
+
/* Small sanity check that the queue is empty at the end of a function. */
void
finish_expr_for_function ()