aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1997-12-12 06:20:32 +0000
committerJason Merrill <jason@gcc.gnu.org>1997-12-12 01:20:32 -0500
commitab23f7879dbd2a9e5f102d001791335f1cf2e938 (patch)
treedd00ebd90f5ad9f7d621a203a00c652f0af8b833
parent74d7ab557f039cde838e431c610535c57b2476df (diff)
downloadgcc-ab23f7879dbd2a9e5f102d001791335f1cf2e938.zip
gcc-ab23f7879dbd2a9e5f102d001791335f1cf2e938.tar.gz
gcc-ab23f7879dbd2a9e5f102d001791335f1cf2e938.tar.bz2
decl2.c (comdat_linkage): Also set DECL_COMDAT.
* 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
-rw-r--r--gcc/cp/ChangeLog11
-rw-r--r--gcc/cp/decl2.c22
-rw-r--r--gcc/cp/pt.c2
3 files changed, 18 insertions, 17 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6c17bd1..c532a87 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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.
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 5e54f49..347feed 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -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)
{
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index a68bf1f..644370c 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -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);