decl2.c (comdat_linkage): Also set DECL_COMDAT.
authorJason Merrill <jason@yorick.cygnus.com>
Fri, 12 Dec 1997 06:20:32 +0000 (06:20 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 12 Dec 1997 06:20:32 +0000 (01:20 -0500)
* decl2.c (comdat_linkage): Also set DECL_COMDAT.
(finish_file): Check DECL_COMDAT instead of weak|one_only.
(import_export_vtable): Use make_decl_one_only instead of
  comdat_linkage for win32 tweak.
(import_export_decl): Likewise.
* pt.c (mark_decl_instantiated): Likewise.

Fix libgcc with -O3.

From-SVN: r17056

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

index 6c17bd1aee4c49d888951c2485d509b1ddb2d0dd..c532a87747b01e72b5ae8f53aa03b0b93ea4641c 100644 (file)
@@ -1,3 +1,14 @@
+Thu Dec 11 22:18:37 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * decl2.c (comdat_linkage): Also set DECL_COMDAT.
+       (finish_file): Check DECL_COMDAT instead of weak|one_only.
+       (import_export_vtable): Use make_decl_one_only instead of
+       comdat_linkage for win32 tweak.
+       (import_export_decl): Likewise.
+       * pt.c (mark_decl_instantiated): Likewise.
+
+       * decl2.c (finish_file): Lose handling of templates in pending_statics.
+
 Thu Dec 11 21:12:09 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_file): Lose call to expand_builtin_throw.
index 5e54f49ed2fc87f00b2d633e3a50a29ccdcbd027..347feed55b94f8d8633dc88b76f707ebc7122a1a 100644 (file)
@@ -2499,6 +2499,9 @@ comdat_linkage (decl)
     make_decl_one_only (decl);
   else
     TREE_PUBLIC (decl) = 0;
+
+  if (DECL_LANG_SPECIFIC (decl))
+    DECL_COMDAT (decl) = 1;
 }
 
 /* Set TREE_PUBLIC and/or DECL_EXTERN on the vtable DECL,
@@ -2533,7 +2536,7 @@ import_export_vtable (decl, type, final)
         linkonce sections.  */
       if (CLASSTYPE_EXPLICIT_INSTANTIATION (type)
          && supports_one_only () && ! SUPPORTS_WEAK)
-       comdat_linkage (decl);
+       make_decl_one_only (decl);
     }
   else
     {
@@ -2810,7 +2813,7 @@ import_export_decl (decl)
             linkonce sections.  */
          if (CLASSTYPE_EXPLICIT_INSTANTIATION (ctype)
              && supports_one_only () && ! SUPPORTS_WEAK)
-           comdat_linkage (decl);
+           make_decl_one_only (decl);
        }
       else if (TYPE_BUILT_IN (ctype) && ctype == TYPE_MAIN_VARIANT (ctype))
        DECL_NOT_REALLY_EXTERN (decl) = 0;
@@ -2963,18 +2966,6 @@ finish_file ()
   walk_vtables ((void (*) PROTO ((tree, tree))) 0,
                finish_prevtable_vardecl);
 
-  for (vars = pending_statics; vars; vars = TREE_CHAIN (vars))
-    {
-      tree decl = TREE_VALUE (vars);
-
-      if (DECL_TEMPLATE_INSTANTIATION (decl)
-         && ! DECL_IN_AGGR_P (decl))
-       {
-         import_export_decl (decl);
-         DECL_EXTERNAL (decl) = ! DECL_NOT_REALLY_EXTERN (decl);
-       }
-    }
-
   for (vars = static_aggregates; vars; vars = TREE_CHAIN (vars))
     if (! TREE_ASM_WRITTEN (TREE_VALUE (vars)))
       rest_of_decl_compilation (TREE_VALUE (vars), 0, 1, 1);
@@ -3255,8 +3246,7 @@ finish_file ()
              *p = TREE_CHAIN (*p);
            else if (DECL_INITIAL (decl) == 0)
              p = &TREE_CHAIN (*p);
-           else if ((TREE_PUBLIC (decl) && ! DECL_WEAK (decl)
-                     && ! DECL_ONE_ONLY (decl))
+           else if ((TREE_PUBLIC (decl) && ! DECL_COMDAT (decl))
                     || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
                     || flag_keep_inline_functions)
              {
index a68bf1fb6be36d3a7653de2f5e1787f096dd0543..644370cf50271dc1d8499b764c2480bc98892f0a 100644 (file)
@@ -4025,7 +4025,7 @@ mark_decl_instantiated (result, extern_p)
       /* For WIN32 we also want to put explicit instantiations in
         linkonce sections.  */
       if (supports_one_only () && ! SUPPORTS_WEAK)
-       comdat_linkage (result);
+       make_decl_one_only (result);
     }
   else if (TREE_CODE (result) == FUNCTION_DECL)
     mark_inline_for_output (result);