]> gcc.gnu.org Git - gcc.git/commitdiff
(make_node, case 'd'): Refine in which obstack PARM_DECLs are
authorRichard Kenner <kenner@gcc.gnu.org>
Wed, 6 Oct 1993 02:33:19 +0000 (22:33 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Wed, 6 Oct 1993 02:33:19 +0000 (22:33 -0400)
allocated.

From-SVN: r5624

gcc/tree.c

index bc4af6e83b023822419b250efeacc49af67bc4a8..aafc7576a16fbcac4e8af57244dc00e2c0104cfb 100644 (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;
 
This page took 0.067163 seconds and 5 git commands to generate.