integrate.c (integrate_decl_tree): Tweak setting of DECL_CONTEXT for inlined declarat...
authorMark Mitchell <mark@codesourcery.com>
Sun, 24 Oct 1999 04:08:16 +0000 (04:08 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Sun, 24 Oct 1999 04:08:16 +0000 (04:08 +0000)
* integrate.c (integrate_decl_tree): Tweak setting of DECL_CONTEXT
for inlined declarations.

From-SVN: r30140

gcc/ChangeLog
gcc/integrate.c

index de9003a73fd1cf3e5104ef9393f72bc416752711..6192c8ecb260148b71d1c5fa3cb176898cabc2e1 100644 (file)
@@ -1,3 +1,8 @@
+Sat Oct 23 21:13:00 1999  Mark Mitchell  <mark@codesourcery.com>
+
+       * integrate.c (integrate_decl_tree): Tweak setting of DECL_CONTEXT
+       for inlined declarations.
+
 Fri Oct 22 18:05:43 1999  Jeffrey A Law  (law@cygnus.com)
 
        * arm.c (logical_binary_operator): New fucntion.
index e312b18853175df1fe4ff99164d516c905b5a748..6c5abe8c1bed1ec2b653a0186812b79a1e9e7718 100644 (file)
@@ -1419,23 +1419,23 @@ integrate_decl_tree (let, map)
       if (DECL_LANG_SPECIFIC (d))
        copy_lang_decl (d);
 
-      /* ??? We used to call pushdecl here, but that does not work now that
-        we generate entire functions as trees.  We only want the pushdecl
-        code that sets DECL_CONTEXT.  Each front end sets DECL_CONTEXT
-        slightly differently though, so we may need new callbacks to the
-        front-ends to do this right.  For now, we just use the code from the
-        C front end and hope that is sufficient.  Alternatively, we could
-        set DECL_CONTEXT (d) here only if DECL_CONTEXT (t) is non-null.  */
-      /* This new declaration is now in the scope of the function into
-        which we are inlining the function, not the function being
-        inlined.  */
-      DECL_CONTEXT (d) = current_function_decl;
-      /* A local extern declaration for a function doesn't constitute nesting.
-        A local auto declaration does, since it's a forward decl
-        for a nested function coming later.  */
-      if (TREE_CODE (d) == FUNCTION_DECL && DECL_INITIAL (d) == 0
-         && DECL_EXTERNAL (d))
-       DECL_CONTEXT (d) = 0;
+      /* Set the context for the new declaration.  */
+      if (!DECL_CONTEXT (t))
+       /* Globals stay global.  */
+       ;
+      else if (DECL_CONTEXT (t) != map->fndecl)
+       /* Things that weren't in the scope of the function we're
+          inlining from aren't in the scope we're inlining too,
+          either.  */
+       ;
+      else if (TREE_STATIC (t))
+       /* Function-scoped static variables should say in the original
+          function.  */
+       ;
+      else
+       /* Ordinary automatic local variables are now in the scope of
+          the new function.  */
+       DECL_CONTEXT (d) = current_function_decl;
 
       /* Add this declaration to the list of variables in the new
         block.  */