Hi     Ok to backport this to gcc-10 branch ?     Tested under Linux x86_64. François On 13/04/21 10:51 pm, redi at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99402 > > Jonathan Wakely changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > Summary|[10/11 Regression] |[10 Regression] std::copy > |std::copy creates |creates _GLIBCXX_DEBUG > |_GLIBCXX_DEBUG false |false positive for attempt > |positive for attempt to |to subscript a > |subscript a dereferenceable |dereferenceable > |(start-of-sequence) |(start-of-sequence) > |iterator |iterator > > --- Comment #10 from Jonathan Wakely --- > This was fixed on trunk by r11-8100: > > libstdc++: [_GLIBCXX_DEBUG] Fix management of __dp_sign_max_size [PR 99402] > > __dp_sign precision indicates that we found out what iterator comes first or > last in the range. __dp_sign_max_size is the same plus it gives the information > of the max size of the range that is to say the max_size value such that > distance(lhs, rhs) < max_size. > Thanks to this additional information we are able to tell when a copy of n > elements > to that range will fail even if we do not know exactly how large it is. > > This patch makes sure that we are properly using this information. > > libstdc++-v3/ChangeLog: > > PR libstdc++/99402 > * include/debug/helper_functions.h (__can_advance(_InputIterator, > const std::pair<_Diff, _Distance_precision>&, int)): New. > (__can_advance(const _Safe_iterator<>&, > const std::pair<_Diff, _Distance_precision>&, int)): New. > * include/debug/macros.h (__glibcxx_check_can_increment_dist): New, > use latter. > (__glibcxx_check_can_increment_range): Adapt to use latter. > (__glibcxx_check_can_decrement_range): Likewise. > * include/debug/safe_iterator.h > (_Safe_iterator<>::_M_can_advance(const std::pair<_Diff, > _Distance_precision>&, > int)): New. > (__can_advance(const _Safe_iterator<>&, > const std::pair<_Diff, _Distance_precision>&, int)): New. > * include/debug/safe_iterator.tcc > (_Safe_iterator<>::_M_can_advance(const std::pair<_Diff, > _Distance_precision>&, > int)): New. > (_Safe_iterator<>::_M_valid_range(const _Safe_iterator<>&, > std::pair&, bool)): Adapt for > __dp_sign_max_size. > (__copy_move_a): Adapt to use __glibcxx_check_can_increment_dist. > (__copy_move_backward_a): Likewise. > (__equal_aux): Likewise. > * include/debug/stl_iterator.h (__can_advance(const > std::reverse_iterator<>&, > const std::pair<_Diff, _Distance_precision>&, int)): New. > (__can_advance(const std::move_iterator<>&, > const std::pair<_Diff, _Distance_precision>&, int)): New. > * testsuite/25_algorithms/copy/debug/99402.cc: New test. >