On Mon, 3 Jun 2024 at 18:46, François Dumont <frs.dum...@gmail.com> wrote: > > > On 03/06/2024 18:20, Jonathan Wakely wrote: > > On Mon, 3 Jun 2024 at 05:56, François Dumont <frs.dum...@gmail.com> wrote: > >> I hadn't try to make my patch as limited as possible to fix the problem, > >> indeed. > >> > >> libstdc++: Fix -Wstringop-overflow warning coming from std::vector > >> [PR109849] > >> > >> libstdc++-v3/ChangeLog: > >> > >> PR libstdc++/109849 > >> * include/bits/vector.tcc > >> (std::vector<>::_M_range_insert(iterator, _FwdIt, _FwdIt, > >> forward_iterator_tag)): Add __builtin_unreachable > >> expression to tell > >> the compiler that the allocated buffer is large enough to > >> receive current > >> elements plus the range to insert. > >> > >> Tested under Linux x64, ok to commit ? > > Does the !__builtin_constant_p(__len) in this version do anything? > > > > If it's a constant, then the compiler can already provide it's in > > range, so the __builtin_unreachable() is redundant, but doesn't do any > > harm. > > > Yes, it prevents some constexpr test failure because > __builtin_unreachable is not a constexpr (at least not for some C++ > Standard versions). > > But it wasn't a nice way to avoid this regression. Here is another > proposal that activate the __builtin_unreachable only for pre-c++11 > modes. C++03 had no problem neither but I haven't found any occurrence > of __cplusplus checks against the C++03 version so I prefer not to add any. > > libstdc++: Fix -Wstringop-overflow warning coming from std::vector > [PR109849] > > libstdc++-v3/ChangeLog: > > PR libstdc++/109849 > * include/bits/vector.tcc > (std::vector<>::_M_range_insert(iterator, _FwdIt, _FwdIt, > forward_iterator_tag))[__cplusplus < 2011103L]: Add > __builtin_unreachable > expression to tell the compiler that the allocated buffer > is large enough to > receive current elements plus the elements of the range to > insert. > > Ok to commit ?
OK for trunk and gcc-14, thanks.