aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/decl2.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2020-01-28 15:15:20 -0500
committerJason Merrill <jason@redhat.com>2020-01-28 16:45:22 -0500
commit25d62480c89d6db90a66ba69f6dbaa820a1ac90b (patch)
tree13bf87eef5349bef8f54b786ede4feab866a2026 /gcc/cp/decl2.c
parent99eb1a824a69eb390bc104a1b91f901773866dd4 (diff)
downloadgcc-25d62480c89d6db90a66ba69f6dbaa820a1ac90b.zip
gcc-25d62480c89d6db90a66ba69f6dbaa820a1ac90b.tar.gz
gcc-25d62480c89d6db90a66ba69f6dbaa820a1ac90b.tar.bz2
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.
Diffstat (limited to 'gcc/cp/decl2.c')
-rw-r--r--gcc/cp/decl2.c8
1 files changed, 6 insertions, 2 deletions
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);