re PR c++/9283 (__attribute__((visibility ("hidden"))) not supported for class/struct)
authorNiall Douglas <s_fsfeurope2@nedprod.com>
Sun, 25 Jul 2004 22:52:22 +0000 (22:52 +0000)
committerGiovanni Bajo <giovannibajo@gcc.gnu.org>
Sun, 25 Jul 2004 22:52:22 +0000 (22:52 +0000)
commitd7afec4b079f40ba7857ae1c898ed537b5c14313
treef9985edc87f0241509ea6f38be708082bb83209a
parent28dab13236a7f958a8dc533363dcbe8e18eeeae5
re PR c++/9283 (__attribute__((visibility ("hidden"))) not supported for class/struct)

PR c++/9283
PR c++/15000
* c-common.c (c_common_attribute_table): Allow
handle_visibility_attribute to be called for types.
(handle_visibility_attribute) When given a type, set the visibility
bits on the TYPE_NAME.  When given a decl, don't set no_add_attrs
so that we can check later whether the attribute was present. Added
warning if attribute applied to non class type.
* c-decl.c (diagnose_mismatched_decls): Updated rules for merging
decls and checking that they are consistent.
* common.opt: Added -fvisibility.
* c.opt, c-opts.c: Added -fvisibility-inlines-hidden.
* c-pragma.h, c-pragma.c: Added handle_pragma_visibility().
* flags.h, tree.h: Added assorted support defines for overall patch
* opts.c: Added parsing support for -fvisibility.
* tree.c (build_decl): Set visibility for all decls to be whatever
is in force at that time.
* varasm.c (default_binds_local_p_1): Reworked logic determining
when to make a symbol locally bound.
* doc/invoke.texi: Added documentation for -fvisibility and
-fvisibility-inlines-hidden.

PR c++/15000
PR c++/9283
* class.c (check_field_decls): Apply hidden visibility if
-fvisibility-inlines-hidden and inlined unless otherwise specified
(build_vtable): Set vtable visibility to class visibility.
(check_field_decls): Default static member visibility to class
visibility.
(check_methods): Default method visibility to class visibility.
* cp-tree.h: Added CLASSTYPE_VISIBILITY and
CLASSTYPE_VISIBILITY_SPECIFIED macro.
* decl.c (duplicate_decls): New logic for merging definition decls
with declaration decls. Added ignore & warning when non default
applied to global operator new or delete.
* method.c, optimize.c, rtti.c: Added setting of VISIBILITY_SPECIFIED
wherever VISIBILITY was changed
* rtti.c (get_tinfo_decl): Set typeinfo visibility to class
visibility.
(tinfo_base_init): Set typeinfo name visibility to class visibility.

PR c++/9283
PR c++/15000
* gcc.dg/visibility-9.c, gcc.dg/visibility-a.c: New tests.
* g++.dg/ext/visibility/: New directory.
* g++.dg/ext/visibility-1.C, g++.dg/ext/visibility-2.C
g++.dg/ext/visibility-3.C, g++.dg/ext/visibility-4.C,
g++.dg/ext/visibility-5.C, g++.dg/ext/visibility-6.C,
g++.dg/ext/visibility-7.C: Move to g++.dg/ext/visibility/.
* g++.dg/ext/visibility/fvisibility.C,
g++.dg/ext/visibility/fvisibility-inlines-hidden.C,
g++.dg/ext/visibility/fvisibility-override1.C
g++.dg/ext/visibility/fvisibility-override2.C
g++.dg/ext/visibility/memfuncts.C
g++.dg/ext/visibility/noPLT.C
g++.dg/ext/visibility/pragma.C
g++.dg/ext/visibility/pragma-override1.C
g++.dg/ext/visibility/pragma-override2.C
g++.dg/ext/visibility/staticmemfuncts.C
g++.dg/ext/visibility/virtual.C: New tests.

Co-Authored-By: Brian Ryner <bryner@brianryner.com>
From-SVN: r85167
49 files changed:
gcc/ChangeLog
gcc/c-common.c
gcc/c-decl.c
gcc/c-opts.c
gcc/c-pragma.c
gcc/c-pragma.h
gcc/c.opt
gcc/common.opt
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/method.c
gcc/cp/optimize.c
gcc/cp/rtti.c
gcc/doc/invoke.texi
gcc/flags.h
gcc/opts.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/visibility-1.C [deleted file]
gcc/testsuite/g++.dg/ext/visibility-2.C [deleted file]
gcc/testsuite/g++.dg/ext/visibility-3.C [deleted file]
gcc/testsuite/g++.dg/ext/visibility-4.C [deleted file]
gcc/testsuite/g++.dg/ext/visibility-5.C [deleted file]
gcc/testsuite/g++.dg/ext/visibility-6.C [deleted file]
gcc/testsuite/g++.dg/ext/visibility-7.C [deleted file]
gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/fvisibility-override1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/fvisibility-override2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/fvisibility.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/memfuncts.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/noPLT.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/pragma-override1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/pragma-override2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/pragma.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/staticmemfuncts.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/virtual.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/visibility-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/visibility-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/visibility-3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/visibility-4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/visibility-5.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/visibility-6.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/visibility/visibility-7.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/visibility-9.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/visibility-a.c [new file with mode: 0644]
gcc/tree.c
gcc/tree.h
gcc/varasm.c