From: Jonathan Wakely Date: Tue, 7 Aug 2018 22:50:55 +0000 (+0100) Subject: Declare some explicit instantiations for strings in Debug Mode X-Git-Tag: releases/gcc-7.4.0~220 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=beaa526e137a69d8ac11dab92d00f9e362ebd875;p=thirdparty%2Fgcc.git Declare some explicit instantiations for strings in Debug Mode 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 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 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 81fa0ec1c522..f82d958796b3 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,12 @@ 2018-08-07 Jonathan Wakely + Backport from mainline + 2018-06-27 Jonathan Wakely + + 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 diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc index d185a54aaf03..65ff2445ff0b 100644 --- a/libstdc++-v3/include/bits/basic_string.tcc +++ b/libstdc++-v3/include/bits/basic_string.tcc @@ -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; # 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&, string&); #ifdef _GLIBCXX_USE_WCHAR_T -# if __cplusplus <= 201402L +# if __cplusplus <= 201402L && _GLIBCXX_EXTERN_TEMPLATE > 0 extern template class basic_string; # elif ! _GLIBCXX_USE_CXX11_ABI extern template basic_string::size_type @@ -1646,7 +1646,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION basic_istream& getline(basic_istream&, wstring&); #endif // _GLIBCXX_USE_WCHAR_T -#endif // _GLIBCXX_EXTERN_TEMPLATE > 0 +#endif // _GLIBCXX_EXTERN_TEMPLATE _GLIBCXX_END_NAMESPACE_VERSION } // namespace std