PR libstdc++/56267
* include/bits/hashtable_policy.h (_Hash_code_base<... false>): Grant
friendship to _Local_iterator_base<..., false>.
(_Local_iterator_base): Give protected access to all existing members.
(_Local_iterator_base::_M_curr()): New public accessor.
(_Local_iterator_base::_M_get_bucket()): New public accessor.
(_Local_iterator_base<..., false>::_M_init()): New function to manage
the lifetime of the _Hash_code_base explicitly.
(_Local_iterator_base<..., false>::_M_destroy()): Likewise.
(_Local_iterator_base<..., false>): Define copy constructor and copy
assignment operator that use new functions to manage _Hash_code_base.
(operator==(const _Local_iterator_base&, const _Local_iterator_base&),
operator==(const _Local_iterator_base&, const _Local_iterator_base&)):
Use public API for _Local_iterator_base.
* include/debug/safe_local_iterator.h (_Safe_local_iterator): Likewise.
* include/debug/unordered_map (__debug::unordered_map::erase(),
__debug::unordered_multimap::erase()): Likewise.
* include/debug/unordered_set (__debug::unordered_set::erase(),
__debug::unordered_multiset::erase()): Likewise.
* testsuite/23_containers/unordered_set/56267-2.cc: New test.
From-SVN: r206834
2013-11-08 François Dumont <fdumont@gcc.gnu.org>
* include/debug/safe_iterator.h (_BeforeBeginHelper<>::_S_Is):
Take only a const safe iterator reference.
(_BeforeBeginHelper<>::_S_Is_beginnest): Likewise.
(__get_distance): Take only one type of iterator.
(_Safe_iterator<>::_M_valid_range<>): Not template anymore.
(_Safe_iterator<>::_M_get_sequence()): Return pointer to const
sequence from a const_iterator and a pointer to sequence from an
iterator.
* include/debug/safe_iterator.tcc: Adapt.
* include/debug/safe_local_iterator.h
(_Safe_local_iterator<>::_M_valid_range<>): Not template anymore.
(_Safe_local_iterator<>::_M_get_sequence()): Return pointer to
const sequence from a const_iterator and a pointer to sequence
from an iterator.
* include/debug/safe_local_iterator.tcc: Adapt.
* include/debug/forward_list
(_BeforeBeginHelper<std::__debug::forward_list<>>): Adapt.
From-SVN: r204598
2011-07-19 François Dumont <francois.cppdevs@free.fr>
* include/debug/safe_unordered_base.h, safe_unordered_sequence.h,
safe_unordered_sequence.tcc, safe_local_iterator.h,
safe_local_iterator.tcc: New, support for unordered sequence safe
local iterators.
* include/Makefile.am: Add previous files.
* include/Makefile.in: Regenerate.
* include/debug/unordered_map, unordered_set: Implement
_Safe_unordered_sequence and expose _Safe_local_iterator.
* include/debug/safe_iterator.h, safe_iterator.tcc: Refactor
_Safe_iterator::_M_get_distance static method to expose it as
__get_distance function and use it in _Safe_local_iterator type.
* include/debug/formatter.h: Add __msg_local_iter_compare_bad
_Debug_msg_id enum entry to notify invalid comparison between local
iterators from different buckets. Add _Parameter constructor from
_Safe_local_iterator.
* include/debug/functions.h: Add __valid_range overload for
_Safe_local_iterator.
* src/debug.cc: Add _Safe_unordered_sequence_base and
_Safe_local_iterator_base methods implementations.
* config/abi/pre/gnu.ver: Add export of some
_Safe_unordered_sequence_base and _Safe_local_iterator_base methods.
* testsuite/util/debug/checks.h: Add use_invalid_iterator function to
simulate use of a singular iterator.
* testsuite/util/debug/unordered_checks.h: New, several functions
to simulate classic invalid usage of unordered sequence local
iterators.
* testsuite/23_containers/unordered_map/debug/
use_erased_local_iterator_neg.cc, invalid_local_iterator_range_neg.cc,
use_invalid_local_iterator_neg.cc, use_invalid_iterator_neg.cc,
invalid_local_iterator_compare_neg.cc: New.
* testsuite/23_containers/unordered_multimap/debug/
use_erased_local_iterator_neg.cc, invalid_local_iterator_range_neg.cc,
use_invalid_local_iterator_neg.cc, use_invalid_iterator_neg.cc,
invalid_local_iterator_compare_neg.cc: New.
* testsuite/23_containers/unordered_set/debug/
use_erased_local_iterator_neg.cc, invalid_local_iterator_range_neg.cc,
use_invalid_local_iterator_neg.cc, use_invalid_iterator_neg.cc,
invalid_local_iterator_compare_neg.cc: New.
* testsuite/23_containers/unordered_multiset/debug/
use_erased_local_iterator_neg.cc, invalid_local_iterator_range_neg.cc,
use_invalid_local_iterator_neg.cc, use_invalid_iterator_neg.cc,
invalid_local_iterator_compare_neg.cc: New.
From-SVN: r176487