$ cat gprel.cc class __attribute__ ((visibility("default"))) Type { private: static long _staticTypeCount; public: Type() { _staticTypeCount++; } ~Type(); }; long Type::_staticTypeCount = 0; Type::~Type() { _staticTypeCount--; } $ gcc -fPIC -fvisibility=hidden -S gprel.cc $ grep _staticTypeCount gprel.s .global _ZN4Type16_staticTypeCountE# .type _ZN4Type16_staticTypeCountE#, @object .size _ZN4Type16_staticTypeCountE#, 8 _ZN4Type16_staticTypeCountE: addl r14 = @gprel(_ZN4Type16_staticTypeCountE#), gp addl r14 = @gprel(_ZN4Type16_staticTypeCountE#), gp addl r14 = @gprel(_ZN4Type16_staticTypeCountE#), gp addl r14 = @gprel(_ZN4Type16_staticTypeCountE#), gp
Broken by 2004-08-03 Mark Mitchell <mark@codesourcery.com> * class.c (build_vtable): Do not set DECL_VISIBILITY here. (check_field_decls): Or here. (check_methods): Or here. (initialize_array): Don't mess with DECL_CONTEXT. * cp-tree.h (start_decl): Adjust prototype. (determine_visibility): New function. * decl.c (duplicate_decls): Remove checks for hidden "operator new". (build_library_fn_1): Give all library functions default visibility. (start_decl): Add pop_scope_p parameter. Tidy. (cp_finish_decl): Do not pop scopes here. Call determine_visibility for variable definitions. (start_preparsed_function): Call determine_visibility. * decl2.c (determine_visibility): New function. * method.c (use_thunk): Fix formatting. * parser.c (cp_parser_condition): Adjust calls to start_decl. (cp_parser_init_declarator): Likewise. * pt.c (instantiate_decl): Always call pop_nested_class. * rtti.c (get_tinfo_decl): Do not set DECL_VISIBILITY. (tinfo_base_init): Likewise.
Subject: Bug 18925 CVSROOT: /cvs/gcc Module name: gcc Changes by: mmitchel@gcc.gnu.org 2004-12-14 02:15:56 Modified files: gcc/cp : ChangeLog class.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/ext/visibility: staticdatamem.C Log message: PR c++/18925 * class.c (layout_class_type): Determine the visibility of static data members. PR c++/18925 * g++.dg/ext/visibility/staticdatamem.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4529&r2=1.4530 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/class.c.diff?cvsroot=gcc&r1=1.692&r2=1.693 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.4746&r2=1.4747 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
Fixed in GCC 4.0.