On Fri, 10 Dec 2021 at 00:39, Martin Sebor via Libstdc++ <libstd...@gcc.gnu.org> wrote: > > On 12/9/21 4:24 PM, Jonathan Wakely via Gcc-patches wrote: > > These warnings are triggered by perfectly valid code using std::string. > > They're particularly bad when --enable-fully-dynamic-string is used, > > because even std::string().begin() will give a warning. > > > > Use pragmas to stop the troublesome warnings for copies done by > > std::char_traits. > > I'm still experimenting with some of the approaches we discussed > last week, but based on my findings so far this was going to be > my suggestion at lest for now, until or unless the problem turns > out to affect more code than just std::string. > > That said, I noticed a typo in the patch: > > > > > libstdc++-v3/ChangeLog: > > > > PR libstdc++/103332 > > PR libstdc++/102958 > > PR libstdc++/103483 > > * include/bits/char_traits.h: Suppress stringop and array-bounds > > warnings. > > --- > > libstdc++-v3/include/bits/char_traits.h | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/libstdc++-v3/include/bits/char_traits.h > > b/libstdc++-v3/include/bits/char_traits.h > > index da3e0ffffaa..3f7befcf8b2 100644 > > --- a/libstdc++-v3/include/bits/char_traits.h > > +++ b/libstdc++-v3/include/bits/char_traits.h > > @@ -54,6 +54,11 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) > > { > > _GLIBCXX_BEGIN_NAMESPACE_VERSION > > > > +#pragma GCC diagnostic push > > +#pragma GCC diagnostic ignored "-Wstringop-overflow" > > +#pragma GCC diagnostic ignored "-Wstringop-overread" > > +#pragma GCC diagnostic ignored "-Warray-bounds" > > (Just for reference, as I mentioned in my private mail, at -O1 > the same code also triggers -Wfree-nonheap-object.) > > > + > > /** > > * @brief Mapping from character type to associated types. > > * > > @@ -990,6 +995,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > } // namespace __detail > > #endif // C++20 > > > > +#pragma GCC diagnostic push > > This should be pop.
Oops! thanks, fixed at r12-5888 by the attached patch. Tested x86_64-linux, pushed to trunk.
commit db184a3453b6fe810e2d9765ef8ed9028f96e968 Author: Jonathan Wakely <jwak...@redhat.com> Date: Fri Dec 10 09:06:37 2021 libstdc++: Fix diagnostic pragma push that should be pop libstdc++-v3/ChangeLog: * include/bits/char_traits.h: Change pragma push to pop. diff --git a/libstdc++-v3/include/bits/char_traits.h b/libstdc++-v3/include/bits/char_traits.h index 3f7befcf8b2..13239580622 100644 --- a/libstdc++-v3/include/bits/char_traits.h +++ b/libstdc++-v3/include/bits/char_traits.h @@ -995,7 +995,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } // namespace __detail #endif // C++20 -#pragma GCC diagnostic push +#pragma GCC diagnostic pop _GLIBCXX_END_NAMESPACE_VERSION } // namespace