(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
This commit is contained in:
parent
e4a4639ef0
commit
cafbaf85f5
38
gcc/tree.c
38
gcc/tree.c
@ -319,8 +319,9 @@ gcc_obstack_init (obstack)
|
|||||||
This is used before starting a nested function. */
|
This is used before starting a nested function. */
|
||||||
|
|
||||||
void
|
void
|
||||||
save_tree_status (p)
|
save_tree_status (p, toplevel)
|
||||||
struct function *p;
|
struct function *p;
|
||||||
|
int toplevel;
|
||||||
{
|
{
|
||||||
p->all_types_permanent = all_types_permanent;
|
p->all_types_permanent = all_types_permanent;
|
||||||
p->momentary_stack = momentary_stack;
|
p->momentary_stack = momentary_stack;
|
||||||
@ -334,10 +335,15 @@ save_tree_status (p)
|
|||||||
p->saveable_obstack = saveable_obstack;
|
p->saveable_obstack = saveable_obstack;
|
||||||
p->rtl_obstack = rtl_obstack;
|
p->rtl_obstack = rtl_obstack;
|
||||||
|
|
||||||
/* Objects that need to be saved in this function can be in the nonsaved
|
if (! toplevel)
|
||||||
obstack of the enclosing function since they can't possibly be needed
|
{
|
||||||
once it has returned. */
|
/* Objects that need to be saved in this function can be in the nonsaved
|
||||||
function_maybepermanent_obstack = function_obstack;
|
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));
|
function_obstack = (struct obstack *) xmalloc (sizeof (struct obstack));
|
||||||
gcc_obstack_init (function_obstack);
|
gcc_obstack_init (function_obstack);
|
||||||
@ -348,30 +354,32 @@ save_tree_status (p)
|
|||||||
|
|
||||||
momentary_firstobj = (char *) obstack_finish (&momentary_obstack);
|
momentary_firstobj = (char *) obstack_finish (&momentary_obstack);
|
||||||
momentary_function_firstobj = momentary_firstobj;
|
momentary_function_firstobj = momentary_firstobj;
|
||||||
maybepermanent_firstobj
|
|
||||||
= (char *) obstack_finish (function_maybepermanent_obstack);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Restore all variables describing the current status from the structure *P.
|
/* Restore all variables describing the current status from the structure *P.
|
||||||
This is used after a nested function. */
|
This is used after a nested function. */
|
||||||
|
|
||||||
void
|
void
|
||||||
restore_tree_status (p)
|
restore_tree_status (p, toplevel)
|
||||||
struct function *p;
|
struct function *p;
|
||||||
|
int toplevel;
|
||||||
{
|
{
|
||||||
all_types_permanent = p->all_types_permanent;
|
all_types_permanent = p->all_types_permanent;
|
||||||
momentary_stack = p->momentary_stack;
|
momentary_stack = p->momentary_stack;
|
||||||
|
|
||||||
obstack_free (&momentary_obstack, momentary_function_firstobj);
|
obstack_free (&momentary_obstack, momentary_function_firstobj);
|
||||||
|
|
||||||
/* Free saveable storage used by the function just compiled and not
|
if (! toplevel)
|
||||||
saved.
|
{
|
||||||
|
/* Free saveable storage used by the function just compiled and not
|
||||||
|
saved.
|
||||||
|
|
||||||
CAUTION: This is in function_obstack of the containing function. So
|
CAUTION: This is in function_obstack of the containing function.
|
||||||
we must be sure that we never allocate from that obstack during
|
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
|
the compilation of a nested function if we expect it to survive
|
||||||
nested function's end. */
|
past the nested function's end. */
|
||||||
obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj);
|
obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj);
|
||||||
|
}
|
||||||
|
|
||||||
obstack_free (function_obstack, 0);
|
obstack_free (function_obstack, 0);
|
||||||
free (function_obstack);
|
free (function_obstack);
|
||||||
|
Loading…
Reference in New Issue
Block a user