On Fri, 11 Nov 2022 at 11:23, Nathaniel Shead via Libstdc++
<libstd...@gcc.gnu.org> wrote:
>
> Hi,
>
> Below is a patch to fix std::string in constexpr contexts on Clang. This
> was originally fixed in the commits attached to PR103295, but a later
> commit 98a0d72a seems to have mistakenly undone this.
>
> Tested on x86_64-linux. Verified using clang-14 and clang-15 that the
> fix works. I haven't added anything to the test suite, since this issue
> is only detected by clang.
>
> This is my first time contributing, so please let me know if I've done
> anything wrong or missed something. Thanks!

Thanks for the patch, I'll get this committed today.

The only thing I had to fix was the indentation in the commit log. The
second line of the ChangeLog should be aligned with the * not the text
following it (so indented by a single tab).


>
> Nathaniel
>
> -- >8 --
>
> Clang still complains about using std::string in constexpr contexts due
> to the changes made in commit 98a0d72a. This patch ensures that we set
> the active member of the union as according to [class.union.general] p6.
>
> libstdc++-v3/ChangeLog:
>
>         PR libstdc++/103295
>         * include/bits/basic_string.h (_M_use_local_data): Set active
>           member to _M_local_buf.
>
> Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com>
> ---
>  libstdc++-v3/include/bits/basic_string.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/libstdc++-v3/include/bits/basic_string.h 
> b/libstdc++-v3/include/bits/basic_string.h
> index 9c2b57f5a1d..2790fd49b05 100644
> --- a/libstdc++-v3/include/bits/basic_string.h
> +++ b/libstdc++-v3/include/bits/basic_string.h
> @@ -352,8 +352,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
>        {
>  #if __cpp_lib_is_constant_evaluated
>         if (std::is_constant_evaluated())
> -         for (_CharT& __c : _M_local_buf)
> -           __c = _CharT();
> +         for (size_type i = 0; i <= _S_local_capacity; ++i)
> +           _M_local_buf[i] = _CharT();
>  #endif
>         return _M_local_data();
>        }
> --
> 2.34.1
>

Reply via email to