]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: [_GLIBCXX_DEBUG] Do not consider detached iterators as value-initialized
authorFrançois Dumont <fdumont@gcc.gnu.org>
Thu, 28 Jan 2021 21:23:28 +0000 (22:23 +0100)
committerFrançois Dumont <fdumont@gcc.gnu.org>
Mon, 8 Aug 2022 18:11:59 +0000 (20:11 +0200)
commit01b1afdc35c13cbff5cd3d37f9319285ab84b157
treea8a490f0aab53b1d8c94b6366e7b1fd1fe114576
parent21c7aab09805d0c8c7695c8a69c8715d673a739a
libstdc++: [_GLIBCXX_DEBUG] Do not consider detached iterators as value-initialized

An attach iterator has its _M_version set to something != 0, the container version. This
value shall be preserved when detaching it so that the iterator does not look like a
value-initialized one.

libstdc++-v3/ChangeLog:

* include/debug/formatter.h (__singular_value_init): New _Iterator_state enum entry.
(_Parameter<>(const _Safe_iterator<>&, const char*, _Is_iterator)): Check if iterator
parameter is value-initialized.
(_Parameter<>(const _Safe_local_iterator<>&, const char*, _Is_iterator)): Likewise.
* include/debug/safe_iterator.h (_Safe_iterator<>::_M_value_initialized()): New. Adapt
checks.
* include/debug/safe_local_iterator.h (_Safe_local_iterator<>::_M_value_initialized()): New.
Adapt checks.
* src/c++11/debug.cc (_Safe_iterator_base::_M_reset): Do not reset _M_version.
(print_field(PrintContext&, const _Parameter&, const char*)): Adapt state_names.
* testsuite/23_containers/deque/debug/iterator1_neg.cc: New test.
* testsuite/23_containers/deque/debug/iterator2_neg.cc: New test.
* testsuite/23_containers/forward_list/debug/iterator1_neg.cc: New test.
* testsuite/23_containers/forward_list/debug/iterator2_neg.cc: New test.
* testsuite/23_containers/forward_list/debug/iterator3_neg.cc: New test.
libstdc++-v3/include/debug/formatter.h
libstdc++-v3/include/debug/safe_iterator.h
libstdc++-v3/include/debug/safe_local_iterator.h
libstdc++-v3/src/c++11/debug.cc
libstdc++-v3/testsuite/23_containers/deque/debug/iterator1_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/deque/debug/iterator2_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/forward_list/debug/iterator1_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/forward_list/debug/iterator2_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/forward_list/debug/iterator3_neg.cc [new file with mode: 0644]