[LLVMbugs] [Bug 8207] New: -fvisibility=hidden does not work for method on an inner struct of an extern template class

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Sep 22 11:50:58 PDT 2010


http://llvm.org/bugs/show_bug.cgi?id=8207

           Summary: -fvisibility=hidden does not work for method on an
                    inner struct of an extern template class
           Product: clang
           Version: unspecified
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: nicolasweber at gmx.de
                CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com


This is another try to get to the bottom of http://crbug.com/56471

hummer:delta thakis$ cat string16.ii
typedef long unsigned int size_t;
namespace std {
  template<typename _CharT>
  class basic_string     {
    private:
    struct _Rep {
      void  _M_clone();
    };
  };
  template<typename _CharT>
  void basic_string<_CharT>::_Rep::_M_clone() {}
}
typedef unsigned short char16;
extern template class std::basic_string<char16>;
template class std::basic_string<char16>;


_M_clone becomes a private external symbol in gcc with -fvisibility=hidden:

hummer:delta thakis$ gcc -c string16.ii -fvisibility=hidden
hummer:delta thakis$ nm -m string16.o
0000000000000010 (__TEXT,__eh_frame) non-external EH_frame1
0000000000000000 (__TEXT,__text) private external __ZNSbItE4_Rep8_M_cloneEv
0000000000000030 (__TEXT,__eh_frame) private external
__ZNSbItE4_Rep8_M_cloneEv.eh
                 (undefined) external ___gxx_personality_v0


It doesn't do that in clang:

hummer:delta thakis$ ~/src/llvm/Release+Asserts/bin/clang -c string16.ii
-fvisibility=hidden
hummer:delta thakis$ nm -m string16.o
0000000000000010 (__TEXT,__eh_frame) non-external EH_frame0
0000000000000000 (__TEXT,__textcoal_nt) weak external __ZNSbItE4_Rep8_M_cloneEv
0000000000000028 (__TEXT,__eh_frame) weak external __ZNSbItE4_Rep8_M_cloneEv.eh


It works fine in clang if I move the method out of the containing inner struct
or make the class not a template class.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list