From 25d62480c89d6db90a66ba69f6dbaa820a1ac90b Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 28 Jan 2020 15:15:20 -0500 Subject: c++: Fix guard variable and attribute weak. My patch for PR 91476 worked for decls that are implicitly comdat/weak due to C++ linkage rules, but broke variables explicitly marked weak. PR c++/93477 PR c++/91476 * decl2.c (copy_linkage): Do copy DECL_ONE_ONLY and DECL_WEAK. --- gcc/cp/decl2.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'gcc/cp/decl2.c') diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 1ecf0b9..98d8e6a 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -3228,8 +3228,12 @@ copy_linkage (tree guard, tree decl) { CP_DECL_THREAD_LOCAL_P (guard) = CP_DECL_THREAD_LOCAL_P (decl); set_decl_tls_model (guard, DECL_TLS_MODEL (decl)); - /* We can't rely on DECL_WEAK (decl) or DECL_ONE_ONLY (decl) here, as - they may not be set until import_export_decl at EOF. */ + if (DECL_ONE_ONLY (decl)) + make_decl_one_only (guard, cxx_comdat_group (guard)); + if (TREE_PUBLIC (decl)) + DECL_WEAK (guard) = DECL_WEAK (decl); + /* Also check vague_linkage_p, as DECL_WEAK and DECL_ONE_ONLY might not + be set until import_export_decl at EOF. */ if (vague_linkage_p (decl)) comdat_linkage (guard); DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl); -- cgit v1.1