[PATCH] libstdc++/98466 Fix _GLIBCXX_DEBUG N3644 integration

François Dumont frs.dumont@gmail.com
Fri Jan 1 17:51:03 GMT 2021


I think the PR is not limited to unordered containers iterator, it 
impacts all _GLIBCXX_DEBUG iterators.

However unordered containers local_iterator was more complicated to 
handle. Because of c++/65816 I prefer to review _Node_iterator_default 
constructor to set _M_cur to nullptr even if in principle it is not 
necessary except for the _Local_iterator_base constructor when hash code 
is not cached.

     libstdc++: Implement N3644 for _GLIBCXX_DEBUG iterators

     libstdc++-v3/ChangeLog

             PR libstdc++/98466
             * include/bits/hashtable_policy.h (_Node_iterator_base()): 
Set _M_cur to nullptr.
             (_Node_iterator()): Make default.
             (_Node_const_iterator()): Make default.
             * include/debug/macros.h 
(__glibcxx_check_erae_range_after): Add _M_singular
             iterator checks.
             * include/debug/safe_iterator.h
             (_GLIBCXX_DEBUG_VERIFY_OPERANDS): Accept if both iterator 
are value initialized.
             * include/debug/safe_local_iterator.h 
(_GLIBCXX_DEBUG_VERIFY_OPERANDS):
             Likewise.
             * include/debug/safe_iterator.tcc 
(_Safe_iterator<>::_M_valid_range): Add
             _M_singular checks on input iterators.
             * src/c++11/debug.cc (_Safe_iterator_base::_M_can_compare): 
Remove _M_singular
             checks.
             * testsuite/23_containers/deque/debug/98466.cc: New test.
             * testsuite/23_containers/unordered_map/debug/98466.cc: New 
test.

Tested under Linux x86_64 normal and debug mode.

Ok to commit ?

François

-------------- next part --------------
A non-text attachment was scrubbed...
Name: n3644.patch
Type: text/x-patch
Size: 7749 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20210101/0276d096/attachment.bin>


More information about the Libstdc++ mailing list