]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Declare some explicit instantiations for strings in Debug Mode
authorJonathan Wakely <jwakely@redhat.com>
Tue, 7 Aug 2018 22:50:55 +0000 (23:50 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 7 Aug 2018 22:50:55 +0000 (23:50 +0100)
The empty reps and the I/O functions do not need to be implicitly
instantiated to enable assertions, so declare the explicit
instantiations when _GLIBCXX_EXTERN_TEMPLATE == -1 (i.e. when
_GLIBCXX_ASSERTIONS is defined).

Backport from mainline
2018-06-27  Jonathan Wakely  <jwakely@redhat.com>

PR libstdc++/86138
* include/bits/basic_string.tcc: [_GLIBCXX_EXTERN_TEMPLATE < 0]
Declare explicit instantiations of COW empty reps and I/O functions.

From-SVN: r263383

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/basic_string.tcc

index 81fa0ec1c5229b100226f4e042bd7696aab7ad92..f82d958796b39d062f508613548005dadb39235f 100644 (file)
@@ -1,5 +1,12 @@
 2018-08-07  Jonathan Wakely  <jwakely@redhat.com>
 
+       Backport from mainline
+       2018-06-27  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/86138
+       * include/bits/basic_string.tcc: [_GLIBCXX_EXTERN_TEMPLATE < 0]
+       Declare explicit instantiations of COW empty reps and I/O functions.
+
        Backport from mainline
        2018-05-08  Jonathan Wakely  <jwakely@redhat.com>
 
index d185a54aaf03ce285659af40e82cc36cac282735..65ff2445ff0b49aa42ddabdb4e65b40622770042 100644 (file)
@@ -1597,13 +1597,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   // Inhibit implicit instantiations for required instantiations,
   // which are defined via explicit instantiations elsewhere.
-#if _GLIBCXX_EXTERN_TEMPLATE > 0
+#if _GLIBCXX_EXTERN_TEMPLATE
   // The explicit instantiations definitions in src/c++11/string-inst.cc
   // are compiled as C++14, so the new C++17 members aren't instantiated.
   // Until those definitions are compiled as C++17 suppress the declaration,
   // so C++17 code will implicitly instantiate std::string and std::wstring
   // as needed.
-# if __cplusplus <= 201402L
+# if __cplusplus <= 201402L && _GLIBCXX_EXTERN_TEMPLATE > 0
   extern template class basic_string<char>;
 # elif ! _GLIBCXX_USE_CXX11_ABI
   // Still need to prevent implicit instantiation of the COW empty rep,
@@ -1626,7 +1626,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     getline(basic_istream<char>&, string&);
 
 #ifdef _GLIBCXX_USE_WCHAR_T
-# if __cplusplus <= 201402L
+# if __cplusplus <= 201402L && _GLIBCXX_EXTERN_TEMPLATE > 0
   extern template class basic_string<wchar_t>;
 # elif ! _GLIBCXX_USE_CXX11_ABI
   extern template basic_string<wchar_t>::size_type
@@ -1646,7 +1646,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     basic_istream<wchar_t>&
     getline(basic_istream<wchar_t>&, wstring&);
 #endif // _GLIBCXX_USE_WCHAR_T
-#endif // _GLIBCXX_EXTERN_TEMPLATE > 0
+#endif // _GLIBCXX_EXTERN_TEMPLATE
 
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace std