https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119274
Bug ID: 119274 Summary: [15 Regression] False positive array-bounds warning Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: larsbj at gullik dot org Target Milestone: --- Created attachment 60741 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=60741&action=edit Unreduced test case This test case compiles without warnings with GCC 14, but gives warnings with GCC 15. Compiled with: g++ -Wfatal-errors -Werror=array-bounds -O2 -std=gnu++23 -c test.cpp g++ (GCC) 15.0.1 20250313 (experimental) g++ -Wfatal-errors -Werror=array-bounds -O2 -std=gnu++23 -c test.cpp In file included from /opt/gcc/gcc-15/include/c++/15.0.1/bits/hashtable_policy.h:36, from /opt/gcc/gcc-15/include/c++/15.0.1/bits/hashtable.h:37, from /opt/gcc/gcc-15/include/c++/15.0.1/bits/unordered_map.h:33, from /opt/gcc/gcc-15/include/c++/15.0.1/unordered_map:43, from /opt/gcc/gcc-15/include/c++/15.0.1/functional:65, from test.cpp:1: In function ‘constexpr void std::__assign_one(_OutIter&, _InIter&) [with bool _IsMove = true; _OutIter = int*; _InIter = int*]’, inlined from ‘constexpr _OutIter std::__copy_move_a2(_InIter, _Sent, _OutIter) [with bool _IsMove = true; _InIter = int*; _Sent = int*; _OutIter = int*]’ at /opt/gcc/gcc-15/include/c++/15.0.1/bits/stl_algobase.h:433:34, inlined from ‘constexpr _OI std::__copy_move_a1(_II, _II, _OI) [with bool _IsMove = true; _II = int*; _OI = int*]’ at /opt/gcc/gcc-15/include/c++/15.0.1/bits/stl_algobase.h:492:42, inlined from ‘constexpr _OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = true; _II = __gnu_cxx::__normal_iterator<int*, vector<int> >; _OI = __gnu_cxx::__normal_iterator<int*, vector<int> >]’ at /opt/gcc/gcc-15/include/c++/15.0.1/bits/stl_algobase.h:500:31, inlined from ‘constexpr _OI std::move(_II, _II, _OI) [with _II = __gnu_cxx::__normal_iterator<int*, vector<int> >; _OI = __gnu_cxx::__normal_iterator<int*, vector<int> >]’ at /opt/gcc/gcc-15/include/c++/15.0.1/bits/stl_algobase.h:674:38, inlined from ‘constexpr std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::_M_erase(iterator, iterator) [with _Tp = int; _Alloc = std::allocator<int>]’ at /opt/gcc/gcc-15/include/c++/15.0.1/bits/vector.tcc:201:6, inlined from ‘constexpr std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(const_iterator, const_iterator) [with _Tp = int; _Alloc = std::allocator<int>]’ at /opt/gcc/gcc-15/include/c++/15.0.1/bits/stl_vector.h:1735:17, inlined from ‘void drop_inplace(std::vector<int>&, size_t)’ at test.cpp:9:16, inlined from ‘test()::<lambda()>’ at test.cpp:17:25, inlined from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = void; _Fn = test()::<lambda()>&; _Args = {}]’ at /opt/gcc/gcc-15/include/c++/15.0.1/bits/invoke.h:63:36, inlined from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = void; _Callable = test()::<lambda()>&; _Args = {}]’ at /opt/gcc/gcc-15/include/c++/15.0.1/bits/invoke.h:113:28, inlined from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = void; _Functor = test()::<lambda()>; _ArgTypes = {}]’ at /opt/gcc/gcc-15/include/c++/15.0.1/bits/std_function.h:292:30: /opt/gcc/gcc-15/include/c++/15.0.1/bits/stl_algobase.h:404:16: error: array subscript 10 is outside array bounds of ‘int [6]’ [-Werror=array-bounds=] 404 | *__out = std::move(*__in); | ~~~~~~~^~~~~~~~~~~~~~~~~~