From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 851 invoked by alias); 8 Nov 2011 08:50:36 -0000 Received: (qmail 840 invoked by uid 22791); 8 Nov 2011 08:50:35 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 08 Nov 2011 08:50:21 +0000 From: "vincenzo.innocente at cern dot ch" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/35688] template visibility not overridden by template arguments Date: Tue, 08 Nov 2011 08:53:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: vincenzo.innocente at cern dot ch X-Bugzilla-Status: RESOLVED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: jason at gcc dot gnu.org X-Bugzilla-Target-Milestone: 4.7.0 X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2011-11/txt/msg00743.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D35688 --- Comment #12 from vincenzo Innocente = 2011-11-08 08:49:22 UTC --- much better! for the test in comment 7 now I get c++ -O0 -shared -fPIC -fvisibility=3Dhidden -o bha.so testICF.cpp=20 nm bha.so | c++filt | grep " T " 0000000000000e5c T go() 00000000000069ce T unsigned long const& std::max(unsigned lo= ng const&, unsigned long const&) 00000000000010b2 T std::__lg(long) 00000000000010d8 T operator new(unsigned long, void*) puzzled by the visibility of std::max above I modified the original test further as cat visTest.cc=20 namespace s __attribute__((visibility("default"))) { template class vector { public: vector() { } }; template void foo(T t) { } } class A { public: A() { } s::vector v; }; s::vector v; int main() { A a; s::foo(a); s::foo(v); s::foo(a.v); return 0; } and I get default visibility for s::vector, as expected. not necessari= ly as wished=E2=80=A6 In my opinion this is consistent with spec, expect bug reports though! c++ -O0 -shared -fPIC -fvisibility=3Dhidden -o bha.so visTest.cc=20 nm bha.so | c++filt=20 0000000000000d77 t __GLOBAL__sub_I_visTest.cc 0000000000000d4c t __static_initialization_and_destruction_0(int, int) 0000000000000d8c t A::A() 0000000000000dba t void s::foo(A) 0000000000000dc0 t void s::foo >(s::vector) 0000000000000dc6 T void s::foo >(s::vector) 0000000000000db0 t s::vector::vector() 0000000000000da6 T s::vector::vector() 0000000000000d04 t __dyld_func_lookup 0000000000000d0a t _main 0000000000001038 d _v U dyld_stub_binder 0000000000000cf0 t dyld_stub_binding_helper p.s I verified that if "s" in NOT default visible vector will become hidden