eugenis created this revision.
eugenis added a reviewer: EricWF.
eugenis added a subscriber: cfe-commits.
eugenis set the repository for this revision to rL LLVM.

The switch to internal_linkage attribute removes 3 symbols from the libc++ 
export table, all in basic_string:
insert(..., InputIterator
insert(..., ForwardIterator
replace(..., InputIterator

These are template methods of a template class. They are instantiated only in 
functions/methods that are marked with LIBCPP_INLINE_VISIBILITY; normally they 
are exported as linkonce_odr; after the internal_linkage switch they are not 
instantiated at all because their callers are never evaluated.

This change explicitly exports these methods to avoid this problem. It does not 
change the export list of libc++.so in any way.


Repository:
  rL LLVM

http://reviews.llvm.org/D15434

Files:
  src/string.cpp

Index: src/string.cpp
===================================================================
--- src/string.cpp
+++ src/string.cpp
@@ -29,6 +29,13 @@
     string
     operator+<char, char_traits<char>, allocator<char> >(char const*, string 
const&);
 
+template string::iterator string::insert(string::const_iterator, char const *,
+                                         char const *);
+template basic_string<wchar_t> &
+basic_string<wchar_t>::replace(basic_string<wchar_t>::const_iterator,
+                               basic_string<wchar_t>::const_iterator,
+                               wchar_t const *, wchar_t const *);
+
 namespace
 {
 


Index: src/string.cpp
===================================================================
--- src/string.cpp
+++ src/string.cpp
@@ -29,6 +29,13 @@
     string
     operator+<char, char_traits<char>, allocator<char> >(char const*, string const&);
 
+template string::iterator string::insert(string::const_iterator, char const *,
+                                         char const *);
+template basic_string<wchar_t> &
+basic_string<wchar_t>::replace(basic_string<wchar_t>::const_iterator,
+                               basic_string<wchar_t>::const_iterator,
+                               wchar_t const *, wchar_t const *);
+
 namespace
 {
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to