re PR middle-end/41611 (guard variable is emitted even when the guarded symbol isn't)

PR c++/41611
	* decl2.c (get_guard): Don't use the same comdat group as the decl.

From-SVN: r154965
This commit is contained in:
Jason Merrill 2009-12-03 19:26:35 -05:00 committed by Jason Merrill
parent 4e3f6d8529
commit d35311a213
4 changed files with 24 additions and 1 deletions

View File

@ -1,5 +1,8 @@
2009-12-03 Jason Merrill <jason@redhat.com>
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.

View File

@ -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);

View File

@ -1,5 +1,8 @@
2009-12-03 Jason Merrill <jason@redhat.com>
PR c++/41611
* g++.dg/abi/guard2.C: New.
PR c++/42266
* g++.dg/cpp0x/variadic97.C: New.

View File

@ -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();
}