]> gcc.gnu.org Git - gcc.git/commitdiff
decl2.c (finish_file): Tweak handling of extern inlines so that they are not unnecess...
authorMark Mitchell <mark@codesourcery.com>
Fri, 23 Apr 1999 16:58:01 +0000 (16:58 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Fri, 23 Apr 1999 16:58:01 +0000 (16:58 +0000)
* decl2.c (finish_file): Tweak handling of extern inlines so that
they are not unnecessarily put out.

From-SVN: r26606

gcc/cp/ChangeLog
gcc/cp/decl2.c

index 20aeda538616014139175162a6c6f2824ea7ed92..d2f3426b3ae6ba00e92f8d4ad85446c08924d40f 100644 (file)
@@ -1,5 +1,8 @@
 1999-04-23  Mark Mitchell  <mark@codesourcery.com>
 
+       * decl2.c (finish_file): Tweak handling of extern inlines so that
+       they are not unnecessarily put out.
+
        * search.c (is_subobject_of_p): Handle TEMPLATE_TYPE_PARMs and
        such as base classes.
 
index ea469f3ef109cd5f04291cf947df68fc5f58c6b9..9d3288f8fc351fca4cadc28f9e31f55cd2057eec 100644 (file)
@@ -3628,7 +3628,8 @@ finish_file ()
     {
       tree decl = VARRAY_TREE (saved_inlines, i);
       
-      if (DECL_NOT_REALLY_EXTERN (decl))
+      if (DECL_NOT_REALLY_EXTERN (decl) && !DECL_COMDAT (decl)
+         && DECL_INITIAL (decl)) 
        DECL_EXTERNAL (decl) = 0;
     }
 
@@ -3636,12 +3637,28 @@ finish_file ()
      initialization.  Do that now.  */
   do
     {
-      if (saved_inlines)
-       reconsider 
-         |= wrapup_global_declarations (&VARRAY_TREE (saved_inlines, 0),
-                                        saved_inlines_used);
-      reconsider 
-       = walk_namespaces (wrapup_globals_for_namespace, /*data=*/0);
+      reconsider = 0;
+
+      /* Above, we hung back on weak functions; they will be defined
+        where they are needed.  But, here we loop again, so that we
+        output the things that *are* needed.  */
+      for (i = 0; i < saved_inlines_used; ++i)
+       {
+         tree decl = VARRAY_TREE (saved_inlines, i);
+      
+         if (DECL_NOT_REALLY_EXTERN (decl)
+             && DECL_INITIAL (decl)
+             && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
+           DECL_EXTERNAL (decl) = 0;
+       }
+
+      if (saved_inlines_used
+         && wrapup_global_declarations (&VARRAY_TREE (saved_inlines, 0),
+                                        saved_inlines_used))
+       reconsider = 1;
+
+      if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
+       reconsider = 1;
 
       /* Static data members are just like namespace-scope globals.  */
       for (i = 0; i < pending_statics_used; ++i) 
@@ -3653,10 +3670,10 @@ finish_file ()
          if (DECL_NOT_REALLY_EXTERN (decl) && ! DECL_IN_AGGR_P (decl))
            DECL_EXTERNAL (decl) = 0;
        }
-      if (pending_statics)
-       reconsider 
-         |= wrapup_global_declarations (&VARRAY_TREE (pending_statics, 0),
-                                        pending_statics_used);
+      if (pending_statics
+         && wrapup_global_declarations (&VARRAY_TREE (pending_statics, 0),
+                                        pending_statics_used))
+       reconsider = 1;
     }
   while (reconsider);
 
This page took 0.089973 seconds and 5 git commands to generate.