aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <merrill@gnu.org>1994-10-02 23:16:51 +0000
committerJason Merrill <merrill@gnu.org>1994-10-02 23:16:51 +0000
commite4a4639ef018444349825504d79025ff56e68f32 (patch)
treeb32bb0d861de5ae1b3ceebbe12e5f839da6d94d0 /gcc
parent2289ec9d149662c2963e088d6d1e84b9d66b4745 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/function.c24
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. */