From c9aa9f3f61ae694944d9cde6ba38279420d327ba Mon Sep 17 00:00:00 2001 From: jason Date: Fri, 4 Dec 2009 00:26:35 +0000 Subject: [PATCH] PR c++/41611 * decl2.c (get_guard): Don't use the same comdat group as the decl. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154965 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/decl2.c | 3 ++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/abi/guard2.C | 16 ++++++++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/abi/guard2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index deb59030bd0..cdbd1c48a1f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2009-12-03 Jason Merrill + PR c++/41611 + * decl2.c (get_guard): Don't use the same comdat group as the decl. + PR c++/42266 * cvt.c (convert_from_reference): Do nothing if TREE_TYPE is null. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 1cd2ded03a3..faa3c9d45a9 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2555,7 +2555,8 @@ get_guard (tree decl) TREE_STATIC (guard) = TREE_STATIC (decl); DECL_COMMON (guard) = DECL_COMMON (decl); DECL_COMDAT (guard) = DECL_COMDAT (decl); - DECL_COMDAT_GROUP (guard) = DECL_COMDAT_GROUP (decl); + if (DECL_ONE_ONLY (decl)) + make_decl_one_only (guard, cxx_comdat_group (guard)); if (TREE_PUBLIC (decl)) DECL_WEAK (guard) = DECL_WEAK (decl); DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ff7a355f451..c68c0b64d4e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2009-12-03 Jason Merrill + PR c++/41611 + * g++.dg/abi/guard2.C: New. + PR c++/42266 * g++.dg/cpp0x/variadic97.C: New. diff --git a/gcc/testsuite/g++.dg/abi/guard2.C b/gcc/testsuite/g++.dg/abi/guard2.C new file mode 100644 index 00000000000..09643e95228 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/guard2.C @@ -0,0 +1,16 @@ +// PR c++/41611 +// Test that the guard gets its own COMDAT group. +// { dg-final { scan-assembler "_ZGVZN1A1fEvE1i,comdat" { target i?86-*-* x86_64-*-* } } } + +struct A { + static int f() + { + static int &i = *new int(); + return i; + } +}; + +int main() +{ + return A::f(); +} -- 2.11.4.GIT