diff options
author | Matt Austern <austern@apple.com> | 2003-12-10 06:34:46 +0000 |
---|---|---|
committer | Matt Austern <austern@gcc.gnu.org> | 2003-12-10 06:34:46 +0000 |
commit | facef326df0c41371da002b8d5e7716346750f17 (patch) | |
tree | e430472ee9dc43efc31173fbf8f2e7bc2d14a17c /gcc/cp | |
parent | 5ec3f5662c13c44e04e4f7e6a79ee050d0ba6884 (diff) | |
download | gcc-facef326df0c41371da002b8d5e7716346750f17.zip gcc-facef326df0c41371da002b8d5e7716346750f17.tar.gz gcc-facef326df0c41371da002b8d5e7716346750f17.tar.bz2 |
re PR c/13134 (Visibility attribute is ignored)
PR c/13134
* c--decl.c (duplicate_decls): Copy visibility flag when appropriate.
* cp/decl.c (duplicate_decls): Copy visibility flag when appropriate.
* testsuite/lib/gcc-dg.exp (dg-require-visibility): Define.
* testsuite/lib/target-supports (check_visibility_available): Define.
* testsuite/gcc.dg/visibility-1.c: New test.
* testsuite/gcc.dg/visibility-2.c: Likewise.
* testsuite/gcc.dg/visibility-3.c: Likewise.
* testsuite/gcc.dg/visibility-4.c: Likewise.
* testsuite/gcc.dg/visibility-5.c: Likewise.
* testsuite/gcc.dg/visibility-6.c: Likewise.
* testsuite/g++.dg/ext/visibility-1.C: Likewise.
* testsuite/g++.dg/ext/visibility-2.C: Likewise.
* testsuite/g++.dg/ext/visibility-3.C: Likewise.
* testsuite/g++.dg/ext/visibility-4.C: Likewise.
* testsuite/g++.dg/ext/visibility-5.C: Likewise.
* testsuite/g++.dg/ext/visibility-6.C: Likewise.
From-SVN: r74487
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 14 |
2 files changed, 18 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7f23f0f..b9a0638 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2003-12-08 Matt Austern <austern@apple.com> + + PR c/13134 + * decl.c (duplicate_decls): Copy visibility flag when appropriate. + 2003-12-09 Giovanni Bajo <giovannibajo@gcc.gnu.org>
* init.c (build_new_1): Deal with an OVERLOAD set when
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 9c6379f..f205f74 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1854,9 +1854,21 @@ duplicate_decls (tree newdecl, tree olddecl) TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl); TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl); DECL_COMMON (newdecl) = DECL_COMMON (olddecl); - DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl); COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl); + /* If either declaration has a nondefault visibility, use it. */ + if (DECL_VISIBILITY (olddecl) != VISIBILITY_DEFAULT) + { + if (DECL_VISIBILITY (newdecl) != VISIBILITY_DEFAULT + && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl)) + { + warning ("%J'%D': visibility attribute ignored because it", + newdecl, newdecl); + warning ("%Jconflicts with previous declaration here", olddecl); + } + DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl); + } + if (TREE_CODE (newdecl) == FUNCTION_DECL) { int function_size; |