Commit Graph

12 Commits

Author SHA1 Message Date
François Dumont adad2a7d90 2015-05-29 François Dumont fdumont@gcc.gnu.org>
* include/debug/debug.h (_GLIBCXX_DEBUG_ASSERT,
	_GLIBCXX_DEBUG_PEDASSERT, _GLIBCXX_DEBUG_ONLY): Move definition...
	* include/debug/assertions.h: ...here, new.
	* include/debug/formatter.h
	(_Error_formatter::_Is_iterator_value_type): New.
	(_Error_formatter::_Is_instance): New.
	(_Error_formatter::_Parameter): Make public and not friend anymore.
	(_Error_formatter::_Parameter::__instance): New _M_kind enum entry.
	(_Error_formatter::_Parameter::__iterator_value_type): New _M_kind enum
	entry.
	(_Error_formatter::_Parameter::_Type): New.
	(_Error_formatter::_Parameter::_Instance): New, inherit from
	latter.
	(union _Error_formatter::_Parameter::_M_variant): Reorganize.
	(_Parameter(_Iterator const&, const char*, _Is_iterator)): Make all
	overloads take iterator through a const reference.
	(_Parameter(const _Iterator&, const char*, _Is_iterator_value_type)):
	New.
	(_Parameter(const _Type&, const char*, _Is_instance)): New.
	(_Error_formatter::_M_print_type): Delete.
	(_Error_formatter::_M_iterator_value_type): New.
	(_Error_formatter::_M_instance): New.
	* include/Makefile.am: Add new above debug file.
	* include/Makefile.in: Regenerate.
	* include/debug/functions.h
	(__check_dereferenceable(const _Safe_iterator<>&),
	__valid_range(const _Safe_iterator<>&),
	__is_safe_random_iterator<_Safe_iterator<>>): Move...
	* include/debug/safe_iterator.h: ... here.
	Replace debug.h include with assertions.h.
	(__check_singular_aux): Move...
	* include/debug/safe_base.h: ... here.
	* include/debug/functions.h
	(__check_dereferenceable(const _Safe_local_iterator<>&),
	__valid_range(const _Safe_local_iterator<>&): Move...
	* include/debug/safe_local_iterator.h: ...here.
	* include/debug/safe_sequence.h: Replace debug.h with assertions.h.
	Remove _Safe_iterator declaration.
	* include/debug/safe_unordered_container.h: Replace debug.h with
	assertions.h.
	* include/debug/array: Replace safe_sequence.h include with
	formatter.h and macros.h.
	* include/debug/deque: Include functions.tcc.
	* include/debug/forward_list: Likewise.
	* include/debug/list: Likewise.
	* include/debug/string: Likewise.
	* include/debug/vector: Likewise.
	* include/bits/unique_ptr.h: Replace debug.h include with new
	assertions.h.
	* include/bits/stl_iterator_base_funcs.h: Likewise.
	* testsuite/23_containers/array/tuple_interface/get_debug_neg.cc:
	Adjust dg-error line number.
	* testsuite/23_containers/array/tuple_interface/
	tuple_element_debug_neg.cc: Likewise.
	* src/c++11/debug.cc: Adapt.

From-SVN: r223877
2015-05-29 21:29:07 +00:00
Jakub Jelinek 5624e564d2 Update copyright years.
From-SVN: r219188
2015-01-05 13:33:28 +01:00
François Dumont ebd4c354b3 re PR libstdc++/62313 (Data race in debug iterators)
2014-09-29  François Dumont  <fdumont@gcc.gnu.org>

	PR libstdc++/62313
	* include/debug/safe_base.h
	(_Safe_iterator_base(const _Safe_iterator_base&)): Delete declaration.
	(_Safe_iterator_base& operator=(const _Safe_iterator_base&)): Likewise.
	* include/debug/safe_iterator.h (_Safe_iterator<>): Move normal iterator
	before _Safe_iterator_base in memory. Lock before modifying the iterator
	in numerous places.
	* include/debug/safe_local_iterator.h
	(_Safe_local_iterator_base(const _Safe_local_iterator_base&)): Delete
	declaration.
	(_Safe_local_iterator_base& operator=(const _Safe_local_iterator_base&)):
	Likewise.
	* include/debug/safe_unordered_base.h (_Safe_local_iterator<>):  Move
	normal iterator before _Safe_iterator_base in memory. Lock before
	modifying the iterator in numerous places.
	* include/debug/forward_list (_Safe_forward_list<>::_M_swap_aux): Adapt.
	* include/debug/safe_sequence.tcc
	(_Safe_sequence<>::_M_transfer_from_if): Adapt.

From-SVN: r215693
2014-09-29 21:22:17 +00:00
François Dumont 15ee1a7745 macros.h [...]: Add parameter to pass the 2 instances to check allocator equality.
2014-05-06  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/macros.h [__glibcxx_check_equal_allocs]: Add
	parameter to pass the 2 instances to check allocator equality.
	* include/debug/safe_container.h: New, define _Safe_container<>.
	* include/Makefile.am: Add previous.
	* include/debug/deque (std::__debug::deque<>): Inherit
	_Safe_container<>. Use default implementation for all special
	functions.
	* include/debug/forward_list (std::__debug::forward_list<>):
	Likewise.
	* include/debug/list (std::__debug::list<>): Likewise.
	* include/debug/map.h (std::__debug::map<>): Likewise.
	* include/debug/multimap.h (std::__debug::multimap<>): Likewise.
	* include/debug/set.h (std::__debug::set<>): Likewise.
	* include/debug/multiset.h (std::__debug::multiset<>): Likewise.
	* include/debug/string (std::__debug::basic_string<>): Likewise.
	* include/debug/unordered_map
	(std::__debug::unordered_map<>): Likewise.
	(std::__debug::unordered_multimap<>): Likewise.
	* include/debug/unordered_set
	(std::__debug::unordered_set<>): Likewise.
	(std::__debug::unordered_multiset<>): Likewise.
	* include/debug/vector (std::__debug::vector<>): Likewise.
	* include/debug/safe_base.h (_Safe_sequence_base()): Add
	noexcept.
	(_Safe_sequence_base(_Safe_sequence_base&&): Remove.
	(~_Safe_sequence_base()): Add noexcept.
	* include/debug/safe_sequence.h
	(std::__debug::_Safe_node_sequence<>): New.
	* include/debug/safe_unordered_base.h
	(_Safe_unordered_container_base()): Add noexcept.
	(~_Safe_unordered_container_base()): Likewise.
	(_M_swap(_Safe_unordered_container_base&)): Likewise.
	* include/debug/safe_unordered_container.h:
	(_Safe_unordered_container<>::_M_invalidate_locals()): New.
	(_Safe_unordered_container<>::_M_invalidate_all()): New.
	* src/c++11/debug.cc: Limit includes, adapt methods noexcept
	qualifications.
	* testsuite/util/debug/checks.h (check_construct1): Just implement
	an invalid constructor invocation  and no other operations
	potentially not supported by some types of container.
	(check_construct2): Likewise.
	(check_construct3): Likewise.
	* testsuite/23_containers/forward_list/allocator/move.cc: Add
	check on iterators to make sure they are correctly moved in debug
	mode.
	* testsuite/23_containers/forward_list/allocator/move_assign.cc:
	Likewise.
	* testsuite/23_containers/map/allocator/move.cc: Likewise.
	* testsuite/23_containers/map/allocator/move_assign.cc: Likewise.
	* testsuite/23_containers/multimap/allocator/move.cc: Likewise.
	* testsuite/23_containers/multimap/allocator/move_assign.cc:
	Likewise.
	* testsuite/23_containers/multiset/allocator/move.cc: Likewise.
	* testsuite/23_containers/multiset/allocator/move_assign.cc:
	Likewise.
	* testsuite/23_containers/set/allocator/move.cc: Likewise.
	* testsuite/23_containers/set/allocator/move_assign.cc: Likewise.
	* testsuite/23_containers/unordered_map/allocator/move.cc:
	Likewise.
	* testsuite/23_containers/unordered_map/allocator/move_assign.cc:
	Likewise.
	* testsuite/23_containers/unordered_multimap/allocator/move.cc:
	Likewise.
	* testsuite/23_containers/unordered_multimap/allocator/move_assign.cc:
	Likewise.
	* testsuite/23_containers/unordered_multiset/allocator/move.cc:
	Likewise.
	* testsuite/23_containers/unordered_multiset/allocator/move_assign.cc:
	Likewise.
	* testsuite/23_containers/unordered_set/allocator/move.cc:
	Likewise.
	* testsuite/23_containers/unordered_set/allocator/move_assign.cc:
	Likewise.
	* testsuite/23_containers/forward_list/debug/construct1_neg.cc:
	New.
	* testsuite/23_containers/forward_list/debug/construct2_neg.cc:
	New.
	* testsuite/23_containers/forward_list/debug/construct3_neg.cc:
	New.
	* testsuite/23_containers/forward_list/debug/construct4_neg.cc:
	New.
	* testsuite/23_containers/forward_list/debug/move_assign_neg.cc:
	New.
	* testsuite/23_containers/forward_list/debug/move_neg.cc: New.
	* testsuite/23_containers/map/debug/construct5_neg.cc: New.
	* testsuite/23_containers/map/debug/move_assign_neg.cc: New.
	* testsuite/23_containers/map/debug/move_neg.cc: New.
	* testsuite/23_containers/multimap/debug/construct5_neg.cc: New.
	* testsuite/23_containers/multimap/debug/move_assign_neg.cc: New.
	* testsuite/23_containers/multimap/debug/move_neg.cc: New.
	* testsuite/23_containers/multiset/debug/construct5_neg.cc: New.
	* testsuite/23_containers/multiset/debug/move_assign_neg.cc: New.
	* testsuite/23_containers/multiset/debug/move_neg.cc: New.
	* testsuite/23_containers/set/debug/construct5_neg.cc: New.
	* testsuite/23_containers/set/debug/move_assign_neg.cc: New.
	* testsuite/23_containers/set/debug/move_neg.cc: New.
	* testsuite/23_containers/unordered_map/debug/construct5_neg.cc:
	New.
	* testsuite/23_containers/unordered_map/debug/move_assign_neg.cc:
	New.
	* testsuite/23_containers/unordered_map/debug/move_neg.cc: New.
	* testsuite/23_containers/unordered_multimap/debug/construct5_neg.cc:
	New.
	* testsuite/23_containers/unordered_multimap/debug/move_assign_neg.cc:
	New.
	* testsuite/23_containers/unordered_multimap/debug/move_neg.cc:
	New.
	* testsuite/23_containers/unordered_multiset/debug/construct5_neg.cc:
	New.
	* testsuite/23_containers/unordered_multiset/debug/move_assign_neg.cc:
	New.
	* testsuite/23_containers/unordered_multiset/debug/move_neg.cc:
	New.
	* testsuite/23_containers/unordered_set/debug/construct5_neg.cc:
	New.
	* testsuite/23_containers/unordered_set/debug/move_assign_neg.cc:
	New.
	* testsuite/23_containers/unordered_set/debug/move_neg.cc: New.
	* testsuite/23_containers/vector/debug/move_neg.cc: New.

From-SVN: r210123
2014-05-06 19:59:44 +00:00
Jonathan Wakely 92e1622850 re PR libstdc++/56267 (unordered containers require Assignable hash function)
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
2014-01-20 15:49:39 +00:00
Richard Sandiford aa118a03c4 Update copyright years in libstdc++-v3/
From-SVN: r206301
2014-01-02 22:30:10 +00:00
François Dumont 2e5189c83a safe_local_iterator.h (_Safe_local_iterator<>): Remove _M_bucket, use same information in normal local_iterator.
2013-11-22  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/safe_local_iterator.h (_Safe_local_iterator<>):
	Remove _M_bucket, use same information in normal local_iterator.
	(operator==): Remove redundant _M_can_compare check.
	* include/debug/safe_local_iterator.tcc: Adapt.
	* include/debug/unordered_set: Likewise.
	* include/debug/unordered_map: Likewise.

From-SVN: r205289
2013-11-22 20:55:53 +00:00
François Dumont 9fc0e24b6c safe_iterator.h (_BeforeBeginHelper<>::_S_Is): Take only a const safe iterator reference.
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
2013-11-08 21:03:58 +00:00
Paolo Carlini a1a0abac54 re PR libstdc++/58049 (libstdc++ bootstrap failure for fix to PR libstdc++/57779)
2013-08-02  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/58049
	* include/debug/functions.h: Include <bits/move.h>; minor formatting
	changes.
	(__foreign_iterator_aux4): Declare __l and __ge constexpr.
	* include/debug/safe_iterator.h (_Safe_iterator<>::operator->):
	Use __addressof.
	* include/debug/safe_local_iterator.h (_Safe_local_iterator<>::
	operator->): Likewise.

From-SVN: r201424
2013-08-02 07:34:55 +00:00
Richard Sandiford 405feeb871 Update copyright in libstdc++-v3.
From-SVN: r195701
2013-02-03 17:54:05 +00:00
Paolo Carlini d28d43815b safe_local_iterator.h (_Safe_local_iterator<>:: _Safe_local_iterator(const _Iterator&, size_type, const _Sequence*)): Fix typo.
2011-07-20  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/debug/safe_local_iterator.h (_Safe_local_iterator<>::
	_Safe_local_iterator(const _Iterator&, size_type, const _Sequence*)):
	Fix typo.

From-SVN: r176500
2011-07-20 09:40:11 +00:00
François Dumont 77e0bf4e07 safe_unordered_base.h, [...]: New, support for unordered sequence safe local iterators.
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
2011-07-19 19:39:45 +00:00