diff options
author | Jason Merrill <merrill@gnu.org> | 1994-10-02 23:16:51 +0000 |
---|---|---|
committer | Jason Merrill <merrill@gnu.org> | 1994-10-02 23:16:51 +0000 |
commit | e4a4639ef018444349825504d79025ff56e68f32 (patch) | |
tree | b32bb0d861de5ae1b3ceebbe12e5f839da6d94d0 | |
parent | 2289ec9d149662c2963e088d6d1e84b9d66b4745 (diff) | |
download | gcc-e4a4639ef018444349825504d79025ff56e68f32.zip gcc-e4a4639ef018444349825504d79025ff56e68f32.tar.gz gcc-e4a4639ef018444349825504d79025ff56e68f32.tar.bz2 |
ontext, adds argument to indicate that the new function is not a nested function.
ontext, adds argument to indicate that the new
function is not a nested function.
(push_function_context): Call it.
(pop_function_context{,_from}): Similarly.
From-SVN: r8205
-rw-r--r-- | gcc/function.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/gcc/function.c b/gcc/function.c index 14317dc..ad26fcc 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -461,7 +461,8 @@ find_function_data (decl) since this function knows only about language-independent variables. */ void -push_function_context () +push_function_context_to (toplevel) + int toplevel; { struct function *p = (struct function *) xmalloc (sizeof (struct function)); @@ -512,7 +513,7 @@ push_function_context () p->fixup_var_refs_queue = 0; p->epilogue_delay_list = current_function_epilogue_delay_list; - save_tree_status (p); + save_tree_status (p, toplevel); save_storage_status (p); save_emit_status (p); init_emit (); @@ -524,11 +525,18 @@ push_function_context () (*save_machine_status) (p); } +void +push_function_context () +{ + push_function_context_to (0); +} + /* Restore the last saved context, at the end of a nested function. This function is called from language-specific code. */ void -pop_function_context () +pop_function_context_from (toplevel) + int toplevel; { struct function *p = outer_function_chain; @@ -545,7 +553,8 @@ pop_function_context () current_function_calls_alloca = p->calls_alloca; current_function_has_nonlocal_label = p->has_nonlocal_label; current_function_has_nonlocal_goto = p->has_nonlocal_goto; - current_function_contains_functions = 1; + if (! toplevel) + current_function_contains_functions = 1; current_function_args_size = p->args_size; current_function_pretend_args_size = p->pretend_args_size; current_function_arg_offset_rtx = p->arg_offset_rtx; @@ -579,7 +588,7 @@ pop_function_context () current_function_epilogue_delay_list = p->epilogue_delay_list; reg_renumber = 0; - restore_tree_status (p); + restore_tree_status (p, toplevel); restore_storage_status (p); restore_expr_status (p); restore_emit_status (p); @@ -603,6 +612,11 @@ pop_function_context () rtx_equal_function_value_matters = 1; virtuals_instantiated = 0; } + +void pop_function_context () +{ + pop_function_context_from (0); +} /* Allocate fixed slots in the stack frame of the current function. */ |