From 0735734176743fd6bb677405ba515bc0d388ca9e Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 1 Dec 2009 16:58:04 -0500 Subject: re PR middle-end/41611 (guard variable is emitted even when the guarded symbol isn't) PR c++/41611 * decl2.c (get_guard): Copy DECL_COMDAT. (comdat_linkage): Set DECL_COMDAT unconditionally. From-SVN: r154885 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl2.c | 4 ++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/abi/guard1.C | 10 ++++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/abi/guard1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c185333..f0b9d7f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2009-12-01 Jason Merrill + + PR c++/41611 + * decl2.c (get_guard): Copy DECL_COMDAT. + (comdat_linkage): Set DECL_COMDAT unconditionally. + 2009-12-01 Jakub Jelinek PR c++/3187 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index c0febad..1cd2ded 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1574,8 +1574,7 @@ comdat_linkage (tree decl) } } - if (DECL_LANG_SPECIFIC (decl)) - DECL_COMDAT (decl) = 1; + DECL_COMDAT (decl) = 1; } /* For win32 we also want to put explicit instantiations in @@ -2555,6 +2554,7 @@ get_guard (tree decl) TREE_PUBLIC (guard) = TREE_PUBLIC (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 (TREE_PUBLIC (decl)) DECL_WEAK (guard) = DECL_WEAK (decl); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b73a142..2b856c2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-12-01 Jason Merrill + + PR c++/41611 + * g++.dg/abi/guard1.C: New. + 2009-12-91 Uros Bizjak * gcc.target/i386/vperm-v4sf-1.c (dg-options): Use -msse. diff --git a/gcc/testsuite/g++.dg/abi/guard1.C b/gcc/testsuite/g++.dg/abi/guard1.C new file mode 100644 index 0000000..76b43d3 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/guard1.C @@ -0,0 +1,10 @@ +// PR c++/41611 +// { dg-final { scan-assembler-not "_ZGVZN1A1fEvE1i" } } + +struct A { + static int f() + { + static int &i = *new int(); + return i; + } +}; -- cgit v1.1