]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
utils.c (gnat_pushdecl): Remove test for PARM_DECLs.
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 30 Aug 2010 16:30:41 +0000 (16:30 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 30 Aug 2010 16:30:41 +0000 (16:30 +0000)
* gcc-interface/utils.c (gnat_pushdecl): Remove test for PARM_DECLs.
Attach fake PARM_DECLs to the topmost block of the function.

From-SVN: r163651

gcc/ada/ChangeLog
gcc/ada/gcc-interface/utils.c

index 076efea4c71079cca2189d9bc0e3fedefdf518a7..86226afd44b59a00ccbc500fc0d9ccf9f19fd92c 100644 (file)
@@ -1,3 +1,8 @@
+2010-08-30  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/utils.c (gnat_pushdecl): Remove test for PARM_DECLs.
+       Attach fake PARM_DECLs to the topmost block of the function.
+
 2010-08-30  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/trans.c (call_to_gnu): Also force the return slot opt
index cef72322e1b0d0cc5fb6bfa71cbd216f234b666d..c3a39d4435786ee62e29e36075e340d2618b3c38 100644 (file)
@@ -418,11 +418,8 @@ gnat_poplevel (void)
 void
 gnat_pushdecl (tree decl, Node_Id gnat_node)
 {
-  /* If this decl is public external or at toplevel, there is no context.
-     But PARM_DECLs always go in the level of its function.  */
-  if (TREE_CODE (decl) != PARM_DECL
-      && ((DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
-         || global_bindings_p ()))
+  /* If this decl is public external or at toplevel, there is no context.  */
+  if ((TREE_PUBLIC (decl) && DECL_EXTERNAL (decl)) || global_bindings_p ())
     DECL_CONTEXT (decl) = 0;
   else
     {
@@ -461,8 +458,14 @@ gnat_pushdecl (tree decl, Node_Id gnat_node)
        }
       else
        {
-         DECL_CHAIN (decl) = BLOCK_VARS (current_binding_level->block);
-         BLOCK_VARS (current_binding_level->block) = decl;
+         tree block;
+         /* Fake PARM_DECLs go into the topmost block of the function.  */
+         if (TREE_CODE (decl) == PARM_DECL)
+           block = BLOCK_SUPERCONTEXT (current_binding_level->block);
+         else
+           block = current_binding_level->block;
+         DECL_CHAIN (decl) = BLOCK_VARS (block);
+         BLOCK_VARS (block) = decl;
        }
     }
 
@@ -1878,9 +1881,7 @@ end_subprog_body (tree body)
 {
   tree fndecl = current_function_decl;
 
-  /* Mark the BLOCK for this level as being for this function and pop the
-     level.  Since the vars in it are the parameters, clear them.  */
-  BLOCK_VARS (current_binding_level->block) = NULL_TREE;
+  /* Attach the BLOCK for this level to the function and pop the level.  */
   BLOCK_SUPERCONTEXT (current_binding_level->block) = fndecl;
   DECL_INITIAL (fndecl) = current_binding_level->block;
   gnat_poplevel ();