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