From b78121f657b9b19cf3c6f3f085451825eb8edc8e Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 2 Nov 1999 07:33:05 +0000 Subject: [PATCH] decl2.c (maybe_make_one_only): Always make things comdat on ELF targets, too. * decl2.c (maybe_make_one_only): Always make things comdat on ELF targets, too. From-SVN: r30341 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl2.c | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index eb67839a9cb..58a962f4bc3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +1999-11-01 Jason Merrill + + * decl2.c (maybe_make_one_only): Always make things comdat on + ELF targets, too. + 1999-10-31 Mark Mitchell * decl.c (finish_function): Call free_after_parsing for functions diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 7b69bec0124..6ecd0946b1d 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2365,9 +2365,13 @@ void maybe_make_one_only (decl) tree decl; { - /* This is not necessary on targets that support weak symbols, because - the implicit instantiations will defer to the explicit one. */ - if (! supports_one_only () || SUPPORTS_WEAK) + /* We used to say that this was not necessary on targets that support weak + symbols, because the implicit instantiations will defer to the explicit + one. However, that's not actually the case in SVR4; a strong definition + after a weak one is an error. Also, not making explicit + instantiations one_only means that we can end up with two copies of + some template instantiations. */ + if (! supports_one_only ()) return; /* We can't set DECL_COMDAT on functions, or finish_file will think