* decl2.c (get_guard): Copy visibility from the guarded variable.

From-SVN: r128226
This commit is contained in:
Jason Merrill 2007-09-06 23:56:41 -04:00 committed by Jason Merrill
parent bd1a56a0c3
commit 3fd406847c
3 changed files with 35 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2007-09-06 Jason Merrill <jason@redhat.com>
* decl2.c (get_guard): Copy visibility from the guarded variable.
2007-09-06 Jan Hubicka <jh@suse.cz>
* semantics.c (expand_body): Do not mark arguments of clones used.

View File

@ -2215,6 +2215,8 @@ get_guard (tree decl)
DECL_ONE_ONLY (guard) = DECL_ONE_ONLY (decl);
if (TREE_PUBLIC (decl))
DECL_WEAK (guard) = DECL_WEAK (decl);
DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
DECL_ARTIFICIAL (guard) = 1;
DECL_IGNORED_P (guard) = 1;

View File

@ -0,0 +1,29 @@
// { dg-options "-fvisibility=hidden" }
// { dg-require-visibility "" }
// { dg-final { scan-not-hidden "_ZGVZN5otherclEvE4s_cd" } }
extern "C" int printf (const char *, ...);
#define DLLEXPORT __attribute__ ((visibility("default")))
struct class_data
{
int apple;
class_data() { printf("non trivial ctor\n"); }
};
struct DLLEXPORT other
{
class_data* operator ()()
{
static class_data s_cd;
return &s_cd;
}
};
int main()
{
other aFoo;
aFoo();
return 0;
}