libstdc++: Define std::basic_stringbuf::view() for old std::string ABI
Unlike the new str()&& members in <sstream>, there is no real difficulty in supporting the new view() members for the old std::string ABI. Enabling it fixes errors in <chrono> where std::ostringstream::view() is used by ostream insertion operators for calendar types. We just need to use [[gnu::always_inline]] on the view() members for the old ABI, because the library doesn't contain instantiations of them for the old ABI. Making them always inline avoids needing to add those instantiations and export them. libstdc++-v3/ChangeLog: * include/std/sstream (basic_stringbuf::view): Define for old std::string ABI. (basic_istringstream::view, basic_0stringstream::view) (basic_stringstream::view): Likewise. * testsuite/27_io/basic_istringstream/view/char/1.cc: Remove { dg-require-effective-target cxx11_abi }. * testsuite/27_io/basic_istringstream/view/wchar_t/1.cc: Likewise. * testsuite/27_io/basic_ostringstream/view/char/1.cc: Likewise. * testsuite/27_io/basic_ostringstream/view/wchar_t/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/view/char/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/view/wchar_t/1.cc: Likewise. * testsuite/27_io/basic_stringstream/view/char/1.cc: Likewise. * testsuite/27_io/basic_stringstream/view/wchar_t/1.cc: Likewise.
This commit is contained in:
parent
db8d6fc572
commit
331b4f168a
9 changed files with 25 additions and 15 deletions
|
@ -43,10 +43,15 @@
|
|||
|
||||
#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI
|
||||
# define _GLIBCXX_LVAL_REF_QUAL &
|
||||
# define _GLIBCXX_SSTREAM_ALWAYS_INLINE
|
||||
#else
|
||||
# define _GLIBCXX_LVAL_REF_QUAL
|
||||
// For symbols that are not exported from libstdc++.so for the COW string ABI.
|
||||
# define _GLIBCXX_SSTREAM_ALWAYS_INLINE [[__gnu__::__always_inline__]]
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
@ -251,7 +256,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
|||
return __ret;
|
||||
}
|
||||
|
||||
#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI
|
||||
#if __cplusplus > 201703L
|
||||
#if _GLIBCXX_USE_CXX11_ABI
|
||||
#if __cpp_concepts
|
||||
template<__allocator_like _SAlloc>
|
||||
basic_string<_CharT, _Traits, _SAlloc>
|
||||
|
@ -275,7 +281,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
|||
_M_sync(_M_string.data(), 0, 0);
|
||||
return __str;
|
||||
}
|
||||
#endif // cxx11 ABI
|
||||
|
||||
_GLIBCXX_SSTREAM_ALWAYS_INLINE
|
||||
basic_string_view<char_type, traits_type>
|
||||
view() const noexcept
|
||||
{
|
||||
|
@ -698,7 +706,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
|||
str() const _GLIBCXX_LVAL_REF_QUAL
|
||||
{ return _M_stringbuf.str(); }
|
||||
|
||||
#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI
|
||||
#if __cplusplus > 201703L
|
||||
#if _GLIBCXX_USE_CXX11_ABI
|
||||
#if __cpp_concepts
|
||||
template<__allocator_like _SAlloc>
|
||||
basic_string<_CharT, _Traits, _SAlloc>
|
||||
|
@ -709,11 +718,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
|||
__string_type
|
||||
str() &&
|
||||
{ return std::move(_M_stringbuf).str(); }
|
||||
#endif // cxx11 ABI
|
||||
|
||||
_GLIBCXX_SSTREAM_ALWAYS_INLINE
|
||||
basic_string_view<char_type, traits_type>
|
||||
view() const noexcept
|
||||
{ return _M_stringbuf.view(); }
|
||||
#endif
|
||||
#endif // C++20
|
||||
|
||||
/**
|
||||
* @brief Setting a new buffer.
|
||||
|
@ -919,7 +930,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
|||
str() const _GLIBCXX_LVAL_REF_QUAL
|
||||
{ return _M_stringbuf.str(); }
|
||||
|
||||
#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI
|
||||
#if __cplusplus > 201703L
|
||||
#if _GLIBCXX_USE_CXX11_ABI
|
||||
#if __cpp_concepts
|
||||
template<__allocator_like _SAlloc>
|
||||
basic_string<_CharT, _Traits, _SAlloc>
|
||||
|
@ -930,11 +942,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
|||
__string_type
|
||||
str() &&
|
||||
{ return std::move(_M_stringbuf).str(); }
|
||||
#endif // cxx11 ABI
|
||||
|
||||
_GLIBCXX_SSTREAM_ALWAYS_INLINE
|
||||
basic_string_view<char_type, traits_type>
|
||||
view() const noexcept
|
||||
{ return _M_stringbuf.view(); }
|
||||
#endif
|
||||
#endif // C++20
|
||||
|
||||
/**
|
||||
* @brief Setting a new buffer.
|
||||
|
@ -1138,7 +1152,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
|||
str() const _GLIBCXX_LVAL_REF_QUAL
|
||||
{ return _M_stringbuf.str(); }
|
||||
|
||||
#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI
|
||||
#if __cplusplus > 201703L
|
||||
#if _GLIBCXX_USE_CXX11_ABI
|
||||
#if __cpp_concepts
|
||||
template<__allocator_like _SAlloc>
|
||||
basic_string<_CharT, _Traits, _SAlloc>
|
||||
|
@ -1149,11 +1164,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
|||
__string_type
|
||||
str() &&
|
||||
{ return std::move(_M_stringbuf).str(); }
|
||||
#endif // cxx11 ABI
|
||||
|
||||
_GLIBCXX_SSTREAM_ALWAYS_INLINE
|
||||
basic_string_view<char_type, traits_type>
|
||||
view() const noexcept
|
||||
{ return _M_stringbuf.view(); }
|
||||
#endif
|
||||
#endif // C++20
|
||||
|
||||
/**
|
||||
* @brief Setting a new buffer.
|
||||
|
@ -1215,6 +1232,7 @@ _GLIBCXX_END_NAMESPACE_CXX11
|
|||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
||||
|
||||
#undef _GLIBCXX_SSTREAM_ALWAYS_INLINE
|
||||
#undef _GLIBCXX_LVAL_REF_QUAL
|
||||
|
||||
#include <bits/sstream.tcc>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
// { dg-options "-std=gnu++2a" }
|
||||
// { dg-do run { target c++2a } }
|
||||
// { dg-require-effective-target cxx11_abi }
|
||||
|
||||
#include <sstream>
|
||||
#include <string_view>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
// { dg-options "-std=gnu++2a" }
|
||||
// { dg-do run { target c++2a } }
|
||||
// { dg-require-effective-target cxx11_abi }
|
||||
|
||||
#include <sstream>
|
||||
#include <string_view>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
// { dg-options "-std=gnu++2a" }
|
||||
// { dg-do run { target c++2a } }
|
||||
// { dg-require-effective-target cxx11_abi }
|
||||
|
||||
#include <sstream>
|
||||
#include <string_view>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
// { dg-options "-std=gnu++2a" }
|
||||
// { dg-do run { target c++2a } }
|
||||
// { dg-require-effective-target cxx11_abi }
|
||||
|
||||
#include <sstream>
|
||||
#include <string_view>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
// { dg-options "-std=gnu++2a" }
|
||||
// { dg-do run { target c++2a } }
|
||||
// { dg-require-effective-target cxx11_abi }
|
||||
|
||||
#include <sstream>
|
||||
#include <string_view>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
// { dg-options "-std=gnu++2a" }
|
||||
// { dg-do run { target c++2a } }
|
||||
// { dg-require-effective-target cxx11_abi }
|
||||
|
||||
#include <sstream>
|
||||
#include <string_view>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
// { dg-options "-std=gnu++2a" }
|
||||
// { dg-do run { target c++2a } }
|
||||
// { dg-require-effective-target cxx11_abi }
|
||||
|
||||
#include <sstream>
|
||||
#include <string_view>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
// { dg-options "-std=gnu++2a" }
|
||||
// { dg-do run { target c++2a } }
|
||||
// { dg-require-effective-target cxx11_abi }
|
||||
|
||||
#include <sstream>
|
||||
#include <string_view>
|
||||
|
|
Loading…
Add table
Reference in a new issue