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). 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: r262167
This commit is contained in:
parent
3beb455a05
commit
db9e7b2a12
2 changed files with 10 additions and 4 deletions
|
@ -1,3 +1,9 @@
|
|||
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.
|
||||
|
||||
2018-06-26 David Edelsohn <dje.gcc@gmail.com>
|
||||
|
||||
* testsuite/experimental/algorithm/sample-2.cc: Add TLS DejaGNU
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue