libstdc++: Support constexpr global std::string for size < 15 [PR105995]

I don't think this is required by the standard, but it's easy to
support.

libstdc++-v3/ChangeLog:

	PR libstdc++/105995
	* include/bits/basic_string.h (_M_use_local_data): Initialize
	the entire SSO buffer.
	* testsuite/21_strings/basic_string/cons/char/105995.cc: New test.
This commit is contained in:
Jonathan Wakely 2022-06-16 14:57:32 +01:00
parent 51309d1158
commit 98a0d72a61
2 changed files with 11 additions and 1 deletions

View File

@ -352,7 +352,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
{
#if __cpp_lib_is_constant_evaluated
if (std::is_constant_evaluated())
_M_local_buf[0] = _CharT();
for (_CharT& __c : _M_local_buf)
__c = _CharT();
#endif
return _M_local_data();
}

View File

@ -0,0 +1,9 @@
// { dg-options "-std=gnu++20" }
// { dg-do compile { target c++20 } }
// { dg-require-effective-target cxx11_abi }
// PR libstdc++/105995
// Not required by the standard, but supported for QoI.
constexpr std::string pr105995_empty;
constexpr std::string pr105995_partial = "0";
constexpr std::string pr105995_full = "0123456789abcde";