diff options
author | François Dumont <fdumont@gcc.gnu.org> | 2021-01-28 22:23:28 +0100 |
---|---|---|
committer | François Dumont <fdumont@gcc.gnu.org> | 2022-08-08 20:11:59 +0200 |
commit | 01b1afdc35c13cbff5cd3d37f9319285ab84b157 (patch) | |
tree | a8a490f0aab53b1d8c94b6366e7b1fd1fe114576 /libstdc++-v3/testsuite/23_containers/deque/debug | |
parent | 21c7aab09805d0c8c7695c8a69c8715d673a739a (diff) | |
download | gcc-01b1afdc35c13cbff5cd3d37f9319285ab84b157.tar.gz |
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.
Diffstat (limited to 'libstdc++-v3/testsuite/23_containers/deque/debug')
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/deque/debug/iterator1_neg.cc | 37 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/deque/debug/iterator2_neg.cc | 40 |
2 files changed, 77 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/iterator1_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/iterator1_neg.cc new file mode 100644 index 00000000000..73f8a044d43 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/deque/debug/iterator1_neg.cc @@ -0,0 +1,37 @@ +// Copyright (C) 2022 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-do run { xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <deque> + +void test01() +{ + typedef typename std::deque<int>::iterator It; + std::deque<int> dq; + dq.push_back(1); + + It it = It(); + (void)(dq.begin() != it); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/iterator2_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/iterator2_neg.cc new file mode 100644 index 00000000000..0abf5cbd4ec --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/deque/debug/iterator2_neg.cc @@ -0,0 +1,40 @@ +// Copyright (C) 2022 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-do run { xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <deque> + +void test01() +{ + typedef typename std::deque<int>::iterator It; + It it; + { + std::deque<int> dq; + it = dq.begin(); + } + + It value_init_it = It(); + (void)(it != value_init_it); +} + +int main() +{ + test01(); + return 0; +} |