(make_node, case 'd'): Refine in which obstack PARM_DECLs are

allocated.

From-SVN: r5624
This commit is contained in:
Richard Kenner 1993-10-05 22:33:19 -04:00
parent ba2e110c46
commit f52b5958f0
1 changed files with 15 additions and 14 deletions

View File

@ -792,25 +792,26 @@ make_node (code)
/* All decls in an inline function need to be saved. */
if (obstack != &permanent_obstack)
obstack = saveable_obstack;
/* PARM_DECLs always go on saveable_obstack, not permanent,
even though we may make them before the function turns
on temporary allocation. */
else if (code == PARM_DECL)
/* PARM_DECLs go on the context of the parent. If this is a nested
function, then we must allocate the PARM_DECL on the parent's
obstack, so that they will live to the end of the parent's
closing brace. This is neccesary in case we try to inline the
function into its parent.
PARM_DECLs of top-level functions do not have this problem. However,
we allocate them where we put the FUNCTION_DECL for languauges such as
Ada that need to consult some flags in the PARM_DECLs of the function
when calling it. */
else if (code == PARM_DECL && obstack != &permanent_obstack)
{
tree context = 0;
if (current_function_decl)
context = decl_function_context (current_function_decl);
/* If this is a nested function, then we must allocate the PARM_DECL
on the parent's saveable_obstack, so that they will live to the
end of the parent's closing brace. This is neccesary in case we
try to inline the function into its parent. */
if (context)
{
struct function *p = find_function_data (context);
obstack = p->function_maybepermanent_obstack;
}
else
obstack = function_maybepermanent_obstack;
obstack
= find_function_data (context)->function_obstack;
}
break;