diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c9273e4881a..42cb6248e55 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-01-29 Jason Merrill + + PR libstdc++/54314 + * varasm.c (default_assemble_visibility): Don't warn about + visibility on artificial decls. + 2013-01-29 Richard Biener PR tree-optimization/56113 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1b640ff3309..65157e1dadf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-01-29 Jason Merrill + + PR libstdc++/54314 + * class.c (build_ctor_vtbl_group): Give construction vtables + hidden visibility. + 2013-01-25 Jason Merrill PR c++/56095 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 605dd16c711..38339f22b69 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -8356,6 +8356,12 @@ build_ctor_vtbl_group (tree binfo, tree t) construction vtable group. */ vtbl = build_vtable (t, id, ptr_type_node); DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1; + /* Don't export construction vtables from shared libraries. Even on + targets that don't support hidden visibility, this tells + can_refer_decl_in_current_unit_p not to assume that it's safe to + access from a different compilation unit (bz 54314). */ + DECL_VISIBILITY (vtbl) = VISIBILITY_HIDDEN; + DECL_VISIBILITY_SPECIFIED (vtbl) = true; v = NULL; accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)), diff --git a/gcc/varasm.c b/gcc/varasm.c index 6b941badd89..66481031022 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -5788,8 +5788,9 @@ default_assemble_visibility (tree decl ATTRIBUTE_UNUSED, assemble_name (asm_out_file, name); fprintf (asm_out_file, "\n"); #else - warning (OPT_Wattributes, "visibility attribute not supported " - "in this configuration; ignored"); + if (!DECL_ARTIFICIAL (decl)) + warning (OPT_Wattributes, "visibility attribute not supported " + "in this configuration; ignored"); #endif } diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c18641364d8..62bf2e215fa 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2013-01-29 Jason Merrill + + PR libstdc++/54314 + * config/abi/pre/gnu.ver: Don't export construction vtables. + * config/abi/pre/gnu-versioned-namespace.ver: Likewise. + 2013-01-28 Jonathan Wakely PR libstdc++/56112 diff --git a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver index d13c05926fa..7513e12fe13 100644 --- a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver +++ b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver @@ -55,9 +55,6 @@ GLIBCXX_7.0 { # function-scope static objects requires a guard variable. _ZGVNSt*; - # construction vtable - _ZTCNSt*; - # VTT structure _ZTTNSt*; diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index 35b4c44de9d..71be1c30a27 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -1336,9 +1336,6 @@ GLIBCXX_3.4.18 { std::random_device::*; }; - # construction vtable - _ZTCSt*; - # std::this_thread::__sleep_for _ZNSt11this_thread11__sleep_for*;