mirror of git://gcc.gnu.org/git/gcc.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). 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
|
|
@ -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>
|
2018-06-26 David Edelsohn <dje.gcc@gmail.com>
|
||||||
|
|
||||||
* testsuite/experimental/algorithm/sample-2.cc: Add TLS DejaGNU
|
* testsuite/experimental/algorithm/sample-2.cc: Add TLS DejaGNU
|
||||||
|
|
|
||||||
|
|
@ -1597,13 +1597,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
|
|
||||||
// Inhibit implicit instantiations for required instantiations,
|
// Inhibit implicit instantiations for required instantiations,
|
||||||
// which are defined via explicit instantiations elsewhere.
|
// 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
|
// 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.
|
// 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,
|
// Until those definitions are compiled as C++17 suppress the declaration,
|
||||||
// so C++17 code will implicitly instantiate std::string and std::wstring
|
// so C++17 code will implicitly instantiate std::string and std::wstring
|
||||||
// as needed.
|
// as needed.
|
||||||
# if __cplusplus <= 201402L
|
# if __cplusplus <= 201402L && _GLIBCXX_EXTERN_TEMPLATE > 0
|
||||||
extern template class basic_string<char>;
|
extern template class basic_string<char>;
|
||||||
# elif ! _GLIBCXX_USE_CXX11_ABI
|
# elif ! _GLIBCXX_USE_CXX11_ABI
|
||||||
// Still need to prevent implicit instantiation of the COW empty rep,
|
// Still need to prevent implicit instantiation of the COW empty rep,
|
||||||
|
|
@ -1626,7 +1626,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
getline(basic_istream<char>&, string&);
|
getline(basic_istream<char>&, string&);
|
||||||
|
|
||||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||||
# if __cplusplus <= 201402L
|
# if __cplusplus <= 201402L && _GLIBCXX_EXTERN_TEMPLATE > 0
|
||||||
extern template class basic_string<wchar_t>;
|
extern template class basic_string<wchar_t>;
|
||||||
# elif ! _GLIBCXX_USE_CXX11_ABI
|
# elif ! _GLIBCXX_USE_CXX11_ABI
|
||||||
extern template basic_string<wchar_t>::size_type
|
extern template basic_string<wchar_t>::size_type
|
||||||
|
|
@ -1646,7 +1646,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
basic_istream<wchar_t>&
|
basic_istream<wchar_t>&
|
||||||
getline(basic_istream<wchar_t>&, wstring&);
|
getline(basic_istream<wchar_t>&, wstring&);
|
||||||
#endif // _GLIBCXX_USE_WCHAR_T
|
#endif // _GLIBCXX_USE_WCHAR_T
|
||||||
#endif // _GLIBCXX_EXTERN_TEMPLATE > 0
|
#endif // _GLIBCXX_EXTERN_TEMPLATE
|
||||||
|
|
||||||
_GLIBCXX_END_NAMESPACE_VERSION
|
_GLIBCXX_END_NAMESPACE_VERSION
|
||||||
} // namespace std
|
} // namespace std
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue