From: Jason Merrill Date: Sun, 2 Oct 1994 23:17:08 +0000 (+0000) Subject: (save_tree_status): Add argument to indicate that the new function is not a nested... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cafbaf85f5da81f8c37b54c303601a75bd278001;p=gcc.git (save_tree_status): Add argument to indicate that the new function is not a nested function. (save_tree_status): Add argument to indicate that the new function is not a nested function. (restore_tree_status): Ditto. From-SVN: r8206 --- diff --git a/gcc/tree.c b/gcc/tree.c index f947ff70a2f..1787d0c6b9d 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -319,8 +319,9 @@ gcc_obstack_init (obstack) This is used before starting a nested function. */ void -save_tree_status (p) +save_tree_status (p, toplevel) struct function *p; + int toplevel; { p->all_types_permanent = all_types_permanent; p->momentary_stack = momentary_stack; @@ -334,10 +335,15 @@ save_tree_status (p) p->saveable_obstack = saveable_obstack; p->rtl_obstack = rtl_obstack; - /* Objects that need to be saved in this function can be in the nonsaved - obstack of the enclosing function since they can't possibly be needed - once it has returned. */ - function_maybepermanent_obstack = function_obstack; + if (! toplevel) + { + /* Objects that need to be saved in this function can be in the nonsaved + obstack of the enclosing function since they can't possibly be needed + once it has returned. */ + function_maybepermanent_obstack = function_obstack; + maybepermanent_firstobj + = (char *) obstack_finish (function_maybepermanent_obstack); + } function_obstack = (struct obstack *) xmalloc (sizeof (struct obstack)); gcc_obstack_init (function_obstack); @@ -348,30 +354,32 @@ save_tree_status (p) momentary_firstobj = (char *) obstack_finish (&momentary_obstack); momentary_function_firstobj = momentary_firstobj; - maybepermanent_firstobj - = (char *) obstack_finish (function_maybepermanent_obstack); } /* Restore all variables describing the current status from the structure *P. This is used after a nested function. */ void -restore_tree_status (p) +restore_tree_status (p, toplevel) struct function *p; + int toplevel; { all_types_permanent = p->all_types_permanent; momentary_stack = p->momentary_stack; obstack_free (&momentary_obstack, momentary_function_firstobj); - /* Free saveable storage used by the function just compiled and not - saved. - - CAUTION: This is in function_obstack of the containing function. So - we must be sure that we never allocate from that obstack during - the compilation of a nested function if we expect it to survive past the - nested function's end. */ - obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj); + if (! toplevel) + { + /* Free saveable storage used by the function just compiled and not + saved. + + CAUTION: This is in function_obstack of the containing function. + So we must be sure that we never allocate from that obstack during + the compilation of a nested function if we expect it to survive + past the nested function's end. */ + obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj); + } obstack_free (function_obstack, 0); free (function_obstack);