소스 검색

Turn off extern templates for most uses. It is causing more problems than it is worth. The extern templates will still be built into the dylib, mainly for ABI stability purposes. And the client can still turn these back on with a #define if desire. This fixes http://llvm.org/bugs/show_bug.cgi?id=17027. However there's no associated test for the test suite because http://llvm.org/bugs/show_bug.cgi?id=17027 needs mismatched dylib and headers to fire.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@189610 91177308-0d34-0410-b5e6-96231b3b80d8
Howard Hinnant 12 년 전
부모
커밋
04a2c71d67
6개의 변경된 파일10개의 추가작업 그리고 1개의 파일을 삭제
  1. 1 1
      include/__config
  2. 1 0
      src/algorithm.cpp
  3. 2 0
      src/ios.cpp
  4. 2 0
      src/locale.cpp
  5. 2 0
      src/string.cpp
  6. 2 0
      src/valarray.cpp

+ 1 - 1
include/__config

@@ -538,7 +538,7 @@ template <unsigned> struct __static_assert_check {};
 #endif
 #endif
 
 
 #ifndef _LIBCPP_EXTERN_TEMPLATE
 #ifndef _LIBCPP_EXTERN_TEMPLATE
-#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
+#define _LIBCPP_EXTERN_TEMPLATE(...)
 #endif
 #endif
 
 
 #ifndef _LIBCPP_EXTERN_TEMPLATE2
 #ifndef _LIBCPP_EXTERN_TEMPLATE2

+ 1 - 0
src/algorithm.cpp

@@ -7,6 +7,7 @@
 //
 //
 //===----------------------------------------------------------------------===//
 //===----------------------------------------------------------------------===//
 
 
+#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
 #include "algorithm"
 #include "algorithm"
 #include "random"
 #include "random"
 #include "mutex"
 #include "mutex"

+ 2 - 0
src/ios.cpp

@@ -7,6 +7,8 @@
 //
 //
 //===----------------------------------------------------------------------===//
 //===----------------------------------------------------------------------===//
 
 
+#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
+
 #include "ios"
 #include "ios"
 #include "streambuf"
 #include "streambuf"
 #include "istream"
 #include "istream"

+ 2 - 0
src/locale.cpp

@@ -7,6 +7,8 @@
 //
 //
 //===----------------------------------------------------------------------===//
 //===----------------------------------------------------------------------===//
 
 
+#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
+
 // On Solaris, we need to define something to make the C99 parts of localeconv
 // On Solaris, we need to define something to make the C99 parts of localeconv
 // visible.
 // visible.
 #ifdef __sun__
 #ifdef __sun__

+ 2 - 0
src/string.cpp

@@ -7,6 +7,8 @@
 //
 //
 //===----------------------------------------------------------------------===//
 //===----------------------------------------------------------------------===//
 
 
+#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
+
 #include "string"
 #include "string"
 #include "cstdlib"
 #include "cstdlib"
 #include "cwchar"
 #include "cwchar"

+ 2 - 0
src/valarray.cpp

@@ -7,6 +7,8 @@
 //
 //
 //===----------------------------------------------------------------------===//
 //===----------------------------------------------------------------------===//
 
 
+#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
+
 #include "valarray"
 #include "valarray"
 
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 _LIBCPP_BEGIN_NAMESPACE_STD