57 Commits
Author SHA1 Message Date
Jakub Jelinek 254a858ae7 Update copyright years. 2026-01-02 09:56:11 +01:00
Jakub Jelinek 6441eb6dc0 Update copyright years. 2025-01-02 11:59:57 +01:00
Jakub Jelinek a945c346f5 Update copyright years. 2024-01-03 12:19:35 +01:00
Jonathan Wakely 7d00a59229 libstdc++: Make __gnu_debug::vector usable in constant expressions [PR109536]
This makes constexpr std::vector (mostly) work in Debug Mode. All safe
iterator instrumentation and checking is disabled during constant
evaluation, because it requires mutex locks and calls to non-inline
functions defined in libstdc++.so. It should be OK to disable the safety
checks, because most UB should be detected during constant evaluation
anyway.

We could try to enable the full checking in constexpr, but it would mean
wrapping all the non-inline functions like _M_attach with an inline
_M_constexpr_attach that does the iterator housekeeping inline without
mutex locks when called for constant evaluation, and calls the
non-inline function at runtime. That could be done in future if we find
that we've lost safety or useful checking by disabling the safe
iterators.

There are a few test failures in C++20 mode, which I'm unable to
explain. The _Safe_iterator::operator++() member gives errors for using
non-constexpr functions during constant evaluation, even though those
functions are guarded by std::is_constant_evaluated() checks. The same
code works fine for C++23 and up.

libstdc++-v3/ChangeLog:

	PR libstdc++/109536
	* include/bits/c++config (__glibcxx_constexpr_assert): Remove
	macro.
	* include/bits/stl_algobase.h (__niter_base, __copy_move_a)
	(__copy_move_backward_a, __fill_a, __fill_n_a, __equal_aux)
	(__lexicographical_compare_aux): Add constexpr to overloads for
	debug mode iterators.
	* include/debug/helper_functions.h (__unsafe): Add constexpr.
	* include/debug/macros.h (_GLIBCXX_DEBUG_VERIFY_COND_AT): Remove
	macro, folding it into ...
	(_GLIBCXX_DEBUG_VERIFY_AT_F): ... here. Do not use
	__glibcxx_constexpr_assert.
	* include/debug/safe_base.h (_Safe_iterator_base): Add constexpr
	to some member functions. Omit attaching, detaching and checking
	operations during constant evaluation.
	* include/debug/safe_container.h (_Safe_container): Likewise.
	* include/debug/safe_iterator.h (_Safe_iterator): Likewise.
	* include/debug/safe_iterator.tcc (__niter_base, __copy_move_a)
	(__copy_move_backward_a, __fill_a, __fill_n_a, __equal_aux)
	(__lexicographical_compare_aux): Add constexpr.
	* include/debug/vector (_Safe_vector, vector): Add constexpr.
	Omit safe iterator operations during constant evaluation.
	* testsuite/23_containers/vector/bool/capacity/constexpr.cc:
	Remove dg-xfail-if for debug mode.
	* testsuite/23_containers/vector/bool/cmp_c++20.cc: Likewise.
	* testsuite/23_containers/vector/bool/cons/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/bool/element_access/1.cc:
	Likewise.
	* testsuite/23_containers/vector/bool/element_access/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/bool/modifiers/assign/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/bool/modifiers/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/bool/modifiers/swap/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/capacity/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/cmp_c++20.cc: Likewise.
	* testsuite/23_containers/vector/cons/constexpr.cc: Likewise.
	* testsuite/23_containers/vector/data_access/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/element_access/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/modifiers/assign/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/modifiers/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/modifiers/swap/constexpr.cc:
	Likewise.
	* testsuite/23_containers/vector/cons/destructible_debug_neg.cc:
	Adjust dg-error line number.
2023-12-14 16:07:48 +00:00
Jakub Jelinek 83ffe9cde7 Update copyright years. 2023-01-16 11:52:17 +01:00
François Dumont c66dc02384 libstdc++: Complete __gnu_debug::string Standard conformity
Add testsuite/testsuite_string.h header to help testing __gnu_debug::basic_string like
std::basic_string depending on _GLIBCXX_DEBUG.

Add using of base type methods in __gnu_debug::basic_string to make use of the method
overloads when there is no debug version.

Fix _GLIBCXX_DEBUG_PEDANTIC assertions in <debug/string>. This header has to be used directly
like __gnu_debug::string, it is not included by _GLIBCXX_DEBUG. It means that
_GLIBCXX_DEBUG_PEDANTIC is not considered to define __glibcxx_check_string and
__glibcxx_check_string_len which are then empty macros. Now those macros are defined
directly in <debug/string> and properly consider _GLIBCXX_DEBUG_PEDANTIC.

libstdc++-v3/ChangeLog:

	* include/debug/debug.h [_GLIBCXX_DEBUG](__glibcxx_requires_string): Define
	using _GLIBCXX_DEBUG_PEDASSERT.
	[_GLIBCXX_DEBUG](__glibcxx_requires_string_len): Likewise.
	* include/debug/macros.h
	(__glibcxx_check_string, __glibcxx_check_string_len): Move...
	* include/debug/string
	(__glibcxx_check_string, __glibcxx_check_string_len): ...here. And define depending
	on _GLIBCXX_DEBUG_PEDANTIC no matter if _GLIBCXX_DEBUG is defined.
	Add using of std::string find, rfind, find_first_of, find_last_of, find_first_not_of
	and find_last_not_of. Remove debug implementations having no debug assertion.
	* testsuite/util/testsuite_string.h: New file. Provides __gnu_test::string and
	__gnu_test::wtring which definition depends on _GLIBCXX_DEBUG.
	* testsuite/21_strings/basic_string/debug/find1_neg.cc: New test case.
	* testsuite/21_strings/basic_string/debug/find2_neg.cc: New test case.
	* testsuite/21_strings/basic_string/operations/find/char/1.cc:
	Include <testsuite_string.h> and use __gnu_test::string.
	* testsuite/21_strings/basic_string/operations/find/char/2.cc: Likewise.
	* testsuite/21_strings/basic_string/operations/find/char/3.cc: Likewise.
	* testsuite/21_strings/basic_string/operations/find/char/4.cc: Likewise.
	* testsuite/21_strings/basic_string/operations/find/char/5.cc: Likewise.
	* testsuite/21_strings/basic_string/operations/find/char/6.cc: Likewise.
	* testsuite/21_strings/basic_string/operations/find/wchar_t/1.cc:
	Include <testsuite_string.h> and use __gnu_test::wstring.
	* testsuite/21_strings/basic_string/operations/find/wchar_t/2.cc: Likewise.
	* testsuite/21_strings/basic_string/operations/find/wchar_t/3.cc: Likewise.
	* testsuite/21_strings/basic_string/operations/find/wchar_t/4.cc: Likewise.
	* testsuite/21_strings/basic_string/operations/find/wchar_t/5.cc: Likewise.
	* testsuite/21_strings/basic_string/operations/find/wchar_t/6.cc: Likewise.
2022-07-19 20:07:28 +02:00
Jakub Jelinek 7adcbafe45 Update copyright years. 2022-01-03 10:42:10 +01:00
François Dumont 5f40d34b6d libstdc++: [_GLIBCXX_DEBUG] Reduce performance impact on std::erase_if
Bypass the _GLIBCXX_DEBUG additional checks in std::__detail::__erase_node_if used
by all implementations of std::erase_if for node based containers.

libstdc++-v3/ChangeLog:

	* include/bits/erase_if.h (__erase_nodes_if): Add _UnsafeContainer template
	parameter. Use it to get iterators to work with.
	* include/debug/macros.h (__glibcxx_check_erase2): New.
	* include/debug/map.h (map<>::erase(_Base_const_iterator)): New.
	(map<>::erase(const_iterator)): Use latter.
	* include/debug/multimap.h (multimap<>::erase(_Base_const_iterator)): New.
	(multimap<>::erase(const_iterator)): Use latter.
	* include/debug/multiset.h (multiset<>::erase(_Base_const_iterator)): New.
	(multiset<>::erase(const_iterator)): Use latter.
	* include/debug/set.h (set<>::erase(_Base_const_iterator)): New.
	(set<>::erase(const_iterator)): Use latter.
	* include/debug/unordered_map (unordered_map<>::erase(_Base_const_iterator)): New.
	(unordered_multimap<>::erase(const_iterator)): New.
	* include/debug/unordered_set (unordered_set<>::erase(_Base_const_iterator)): New.
	(unordered_multiset<>::erase(const_iterator)): New.
	* include/experimental/map (erase_if): Adapt.
	* include/experimental/set (erase_if): Adapt.
	* include/experimental/unordered_map (erase_if): Adapt.
	* include/experimental/unordered_set (erase_if): Adapt.
	* include/std/map (erase_if): Adapt.
	* include/std/set (erase_if): Adapt.
	* include/std/unordered_map (erase_if): Adapt.
	* include/std/unordered_set (erase_if): Adapt.
2021-11-20 16:11:22 +01:00
Jonathan Wakely 6b42b5a8a2 libstdc++: Use __builtin_unreachable for constexpr assertions [PR 100676]
The current implementation of compile-time precondition checks causes
compilation to fail by calling a non-constexpr function declared at
block scope. This breaks the CUDA compiler, which wraps some libstdc++
headers in a pragma that declares everything as a __host__ __device__
function, but others are not wrapped and so everything is a __host__
function. The local declaration thus gets redeclared as two different
types of function, which doesn't work.

Just use __builtin_unreachable to make constant evaluation fail, instead
of the local function declaration. Also simplify the assertion macros,
which has the side effect of giving simpler compilation errors when
using Clang.

libstdc++-v3/ChangeLog:

	PR libstdc++/100676
	* include/bits/c++config (__glibcxx_assert_1): Rename to ...
	(__glibcxx_constexpr_assert): ... this.
	(__glibcxx_assert_impl): Use __glibcxx_constexpr_assert.
	(__glibcxx_assert): Define as either __glibcxx_constexpr_assert
	or __glibcxx_assert_impl.
	(__glibcxx_assert_2): Remove
	* include/debug/macros.h (_GLIBCXX_DEBUG_VERIFY_AT_F): Use
	__glibcxx_constexpr_assert instead of __glibcxx_assert_1.
	* testsuite/21_strings/basic_string_view/element_access/char/back_constexpr_neg.cc:
	Adjust expected error.
	* testsuite/21_strings/basic_string_view/element_access/char/constexpr_neg.cc:
	Likewise.
	* testsuite/21_strings/basic_string_view/element_access/char/front_constexpr_neg.cc:
	Likewise.
	Likewise.
	* testsuite/21_strings/basic_string_view/element_access/wchar_t/back_constexpr_neg.cc:
	Likewise.
	* testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr_neg.cc:
	Likewise.
	* testsuite/21_strings/basic_string_view/element_access/wchar_t/front_constexpr_neg.cc:
	Likewise.
	* testsuite/23_containers/span/back_neg.cc: Likewise.
	* testsuite/23_containers/span/front_neg.cc: Likewise.
	* testsuite/23_containers/span/index_op_neg.cc: Likewise.
2021-05-20 20:49:57 +01:00
François Dumont cc79682046 libstdc++: [_GLIBCXX_DEBUG] Fix management of __dp_sign_max_size [PR 99402]
__dp_sign precision indicates that we found out what iterator comes first or
last in the range. __dp_sign_max_size is the same plus it gives the information
of the max size of the range that is to say the max_size value such that
distance(lhs, rhs) < max_size.
Thanks to this additional information we are able to tell when a copy of n elements
to that range will fail even if we do not know exactly how large it is.

This patch makes sure that we are properly using this information.

libstdc++-v3/ChangeLog:

	PR libstdc++/99402
	* include/debug/helper_functions.h (__can_advance(_InputIterator,
	const std::pair<_Diff, _Distance_precision>&, int)): New.
	(__can_advance(const _Safe_iterator<>&,
	const std::pair<_Diff, _Distance_precision>&, int)): New.
	* include/debug/macros.h (__glibcxx_check_can_increment_dist): New,
	use latter.
	(__glibcxx_check_can_increment_range): Adapt to use latter.
	(__glibcxx_check_can_decrement_range): Likewise.
	* include/debug/safe_iterator.h
	(_Safe_iterator<>::_M_can_advance(const std::pair<_Diff, _Distance_precision>&,
	int)): New.
	(__can_advance(const _Safe_iterator<>&,
	const std::pair<_Diff, _Distance_precision>&, int)): New.
	* include/debug/safe_iterator.tcc
	(_Safe_iterator<>::_M_can_advance(const std::pair<_Diff, _Distance_precision>&,
	int)): New.
	(_Safe_iterator<>::_M_valid_range(const _Safe_iterator<>&,
	std::pair<difference_type, _Distance_precision>&, bool)): Adapt for
	__dp_sign_max_size.
	(__copy_move_a): Adapt to use __glibcxx_check_can_increment_dist.
	(__copy_move_backward_a): Likewise.
	(__equal_aux): Likewise.
	* include/debug/stl_iterator.h (__can_advance(const std::reverse_iterator<>&,
	const std::pair<_Diff, _Distance_precision>&, int)): New.
	(__can_advance(const std::move_iterator<>&,
	const std::pair<_Diff, _Distance_precision>&, int)): New.
	* testsuite/25_algorithms/copy/debug/99402.cc: New test.
2021-04-09 21:46:35 +02:00
François Dumont 05a30af3f2 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.
2021-01-14 19:23:54 +01:00
Jakub Jelinek 99dee82307 Update copyright years. 2021-01-04 10:26:59 +01:00
François Dumont 815eb852a2 libstdc++: Fix _GLIBCXX_DEBUG mode constexpr compatibility
The __glibcxx_check_can_[increment|decrement]_range macros are using the
_GLIBCXX_DEBUG_VERIFY_COND_AT macro which is not constexpr compliant and will produce nasty
diagnostics rather than the std::__failed_assertion dedicated to constexpr. Replace it with
correct _GLIBCXX_DEBUG_VERIFY_AT_F.

libstdc++-v3/ChangeLog:

	* include/debug/macros.h (__glibcxx_check_can_increment_range): Replace
	_GLIBCXX_DEBUG_VERIFY_COND_AT usage with _GLIBCXX_DEBUG_VERIFY_AT_F.
	(__glibcxx_check_can_decrement_range): Likewise.
	* testsuite/25_algorithms/copy_backward/constexpr.cc (test03): New.
	* testsuite/25_algorithms/copy/debug/constexpr_neg.cc: New test.
	* testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc: New test.
	* testsuite/25_algorithms/equal/constexpr_neg.cc: New test.
	* testsuite/25_algorithms/equal/debug/constexpr_neg.cc: New test.
2020-12-12 18:07:45 +01:00
François Dumont 38b17c27ce libstdc++: Make _GLIBCXX_DEBUG checks constexpr compatible
libstdc++-v3/ChangeLog:

	* include/debug/assertions.h (__glibcxx_requires_non_empty_range):
	Remove __builtin_expect.
	(__glibcxx_requires_subscript): Likewise.
	(__glibcxx_requires_nonempty): Likewise.
	* include/debug/formatter.h (__check_singular): Add C++11 constexpr
	qualification.
	* include/debug/helper_functions.h (__check_singular): Likewise. Skip
	check if constant evaluated.
	(__valid_range): Do not skip check if constant evaluated.
	* include/debug/macros.h (_GLIBCXX_DEBUG_VERIFY_COND_AT): Add
	__builtin_expect.
	(_GLIBCXX_DEBUG_VERIFY_AT_F): Use __glibcxx_assert_1.
	* testsuite/21_strings/basic_string_view/element_access/char/back_constexpr_neg.cc:
	New test.
	* testsuite/21_strings/basic_string_view/element_access/char/constexpr.cc: New test.
	* testsuite/21_strings/basic_string_view/element_access/char/constexpr_neg.cc: New test.
	* testsuite/21_strings/basic_string_view/element_access/char/front_back_constexpr.cc:
	New test.
	* testsuite/21_strings/basic_string_view/element_access/char/front_constexpr_neg.cc:
	New test.
	* testsuite/21_strings/basic_string_view/element_access/wchar_t/back_constexpr_neg.cc:
	New test.
	* testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr.cc: New test.
	* testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr_neg.cc: New test.
	* testsuite/21_strings/basic_string_view/element_access/wchar_t/front_constexpr_neg.cc:
	New test.
	* testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc: New test.
	* testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc: New test.
	* testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc: New test.
	* testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc: New test.
	* testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc: New test.
	* testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc: New test.
	* testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc: New test.
	* testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc: New test.
	* testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc: New test.
	* testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc: New test.
2020-11-09 21:11:13 +01:00
Jonathan Wakely c2fb0a1a2e libstdc++: Make self-move well-defined for containers [PR 85828]
The C++ LWG recently confirmed that self-move assignment should not have
undefined behaviour for standard containers (see the proposed resolution
of LWG 2839). The result should be a valid but unspecified value, just
like other times when a container is moved from.

Our std::list, std::__cxx11::basic_string and unordered containers all
have bugs which result in undefined behaviour.

For std::list the problem is that we clear the previous contents using
_M_clear() instead of clear(). This means the _M_next, _M_prev and
_M_size members are not zeroed, and so after we "update" them (with
their existing values), we are left with dangling pointers and a
non-zero size, but no elements.

For the unordered containers the problem is similar. _Hashtable first
deallocates the existing contents, then takes ownership of the pointers
from the RHS object (which has just had its contents deallocated so the
pointers are dangling).

For std::basic_string it's a little more subtle. When the string is
local (i.e. fits in the SSO buffer) we use char_traits::copy to copy the
contents from this->data() to __rhs.data(). When &__rhs == this that
copy violates the precondition that the ranges don't overlap. We only
need to check for self-move for this case where it's local, because the
only other case that can be true for self-move is that it's non-local
but the allocators compare equal. In that case the data pointer is
neither deallocated nor leaked, so the result is well-defined.

This patch also makes a small optimization for std::deque move
assignment, to use the efficient move when is_always_equal is false, but
the allocators compare equal at runtime.

Finally, we need to remove all the Debug Mode checks which abort the
program when a self-move is detected, because it's not undefined to do
that.

Before PR 85828 can be closed we should also look into fixing
std::shuffle so it doesn't do any redundant self-swaps.

libstdc++-v3/ChangeLog:

	PR libstdc++/85828
	* include/bits/basic_string.h (operator=(basic_string&&)): Check
	for self-move before copying with char_traits::copy.
	* include/bits/hashtable.h (operator=(_Hashtable&&)): Check for
	self-move.
	* include/bits/stl_deque.h (_M_move_assign1(deque&&, false_type)):
	Check for equal allocators.
	* include/bits/stl_list.h (_M_move_assign(list&&, true_type)):
	Call clear() instead of _M_clear().
	* include/debug/formatter.h (__msg_self_move_assign): Change
	comment.
	* include/debug/macros.h (__glibcxx_check_self_move_assign):
	(_GLIBCXX_DEBUG_VERIFY): Remove.
	* include/debug/safe_container.h (operator=(_Safe_container&&)):
	Remove assertion check for safe move and make it well-defined.
	* include/debug/safe_iterator.h (operator=(_Safe_iterator&&)):
	Remove assertion check for self-move.
	* include/debug/safe_local_iterator.h
	(operator=(_Safe_local_iterator&&)): Likewise.
	* testsuite/21_strings/basic_string/cons/char/self_move.cc: New test.
	* testsuite/23_containers/deque/cons/self_move.cc: New test.
	* testsuite/23_containers/forward_list/cons/self_move.cc: New test.
	* testsuite/23_containers/list/cons/self_move.cc: New test.
	* testsuite/23_containers/set/cons/self_move.cc: New test.
	* testsuite/23_containers/unordered_set/cons/self_move.cc: New test.
	* testsuite/23_containers/vector/cons/self_move.cc: New test.
2020-08-12 20:36:00 +01:00
Jakub Jelinek 8d9254fc8a Update copyright years.
From-SVN: r279813
2020-01-01 12:51:42 +01:00
François Dumont 97d5766531 stl_algo.h (merge): Fix documentation.
2019-09-28  François Dumont  <fdumont@gcc.gnu.org>

	* include/bits/stl_algo.h (merge): Fix documentation.
	* include/debug/functions.h (__check_sorted_aux): Add C++20 constexpr.
	(__check_sorted): Likewise and remove nested irreflexive check.
	(__check_sorted_set_aux, __check_sorted_set): Add C++20 constexpr.
	(__check_partitioned_lower, __check_partitioned_upper): Likewise.
	(_Irreflexive_checker::_S_is_valid): Likewise.
	(__is_irreflexive, __is_irreflexive_pred): Likewise.
	* include/debug/helper_functions.h (__get_distance): Add constexpr.
	(__valid_range_aux): Add C++20 constexpr.
	(__valid_range(_Iter, _Iter, _Distance_traits<_Iter>::__type&)):
	Likewise and add std::is_constant_evaluated check.
	(__valid_range_aux(_Iter, _Iter, std::input_iterator_tag)): New.
	(__valid_range_aux(_Iter, _Iter, std::random_accss_iterator_tag)): New.
	(__valid_range_aux(_Integral, _Integral, std::__true_type)): New,
	use latter.
	(__valid_range(_Iter, _Iter)): Adapt to use latter, add constexpr and
	__builtin_is_contant_evaludated check..
	(__can_advance, __base): Add constexpr.
	* include/debug/macros.h [_GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED]
	(_GLIBCXX_DEBUG_VERIFY_COND_AT): New.
	(__glibcxx_check_sorted): Use __glibcxx_check_irreflexive.
	(__glibcxx_check_sorted_pred): Use __glibcxx_check_irreflexive_pred.
	* testsuite/25_algorithms/binary_search/constexpr.cc: Use irreflexive
	std::less.
	* testsuite/25_algorithms/is_sorted/constexpr.cc: Likewise.
	* testsuite/25_algorithms/merge/constexpr.cc: Fix order in camm. Fix
	lambda to be irreflexive.

From-SVN: r276260
2019-09-28 21:11:55 +00:00
Jakub Jelinek a554497024 Update copyright years.
From-SVN: r267494
2019-01-01 13:31:55 +01:00
François Dumont eb04ee1d0f 2018-06-13 François Dumont <fdumont@gcc.gnu.org>
* include/debug/helper_functions.h
	(__gnu_debug::_Safe_iterator<>): Add declaration.
	(__can_advance(_Ite, _Size)): New.
	(__can_advance(const _Safe_iterator<>&, _Size)): Overload declaration.
	* include/debug/functions.h
	(__gnu_debug::_Safe_iterator<>): Remove declaration.
	* include/debug/stl_iterator.h
	(__can_advance(const _Safe_iterator<>&)): New definition.
	* include/debug/stl_iterator.h
	(__can_advance(const std::reverse_iterator<>&, _Size)): New.
	(__can_advance(const std::move_iterator<>&, _Size)): New.
	* include/debug/macros.h (__glibcxx_check_can_increment): New.
	* include/debug/debug.h (__glibcxx_requires_can_increment): New.
	* include/bits/stl_algobase.h (fill_n): Use latter.
	* testsuite/25_algorithms/fill_n/2.cc: New.
	* testsuite/25_algorithms/fill_n/debug/1_neg.cc: New.
	* testsuite/25_algorithms/fill_n/debug/2_neg.cc: New.
	* testsuite/25_algorithms/fill_n/debug/3_neg.cc: New.
	* testsuite/25_algorithms/fill_n/debug/4_neg.cc: New.

From-SVN: r261566
2018-06-13 20:27:26 +00:00
François Dumont 84a9d3b6c1 macros.h (__glibcxx_check_can_increment_range): New.
2018-06-12  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/macros.h (__glibcxx_check_can_increment_range): New.
	(__glibcxx_check_can_decrement_range): New.
	* include/debug/debug.h (__glibcxx_requires_can_increment_range): New.
	(__glibcxx_requires_can_decrement_range): New.
	* include/bits/stl_algobase.h (std::copy(_II, _II, _OI)): Use
	__glibcxx_requires_can_increment_range.
	(std::move(_II, _II, _OI)): Likewise.
	(std::copy_backward(_BI, _BI, _BI2)): Use
	__glibcxx_requires_can_decrement_range.
	(std::move_backward(_BI, _BI, _BI2)): Likewise.
	* testsuite/25_algorithms/copy_backward/debug/1_neg.cc: New.
	* testsuite/25_algorithms/copy_backward/debug/2_neg.cc: New.
	* testsuite/25_algorithms/copy_backward/debug/3_neg.cc: New.
	* testsuite/25_algorithms/equal/debug/1_neg.cc: New.
	* testsuite/25_algorithms/equal/debug/2_neg.cc: New.
	* testsuite/25_algorithms/equal/debug/3_neg.cc: New.

From-SVN: r261525
2018-06-12 20:18:35 +00:00
François Dumont 90aabc7e9b macros.h (__glibcxx_check_valid_range_at): New.
2018-05-08  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/macros.h (__glibcxx_check_valid_range_at): New.
	* include/debug/functions.h (__check_valid_range): Use latter.
	* include/debug/macros.h (__glibcxx_check_valid_constructor_range): New,
	use latter.
	* include/debug/deque
	(deque::deque<_Iter>(_Iter, _Iter, const _Alloc&)): Use latter.
	* include/debug/forward_list
	(forward_list::forward_list<_Iter>(_Iter, _Iter, const _Alloc&)):
	Likewise.
	* include/debug/list
	(list::list<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
	* include/debug/list
	(list::list<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
	* include/debug/map.h
	(map::map<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
	(map::map<_Iter>(_Iter, _Iter, const _Compare&, const _Alloc&)):
	Likewise.
	* include/debug/multimap.h
	(multimap::multimap<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
	(multimap::multimap<_Iter>(_Iter, _Iter, const _Compare&,
	const _Alloc&)): Likewise.
	* include/debug/set.h
	(set::set<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
	(set::set<_Iter>(_Iter, _Iter, const _Compare&, const _Alloc&)):
	Likewise.
	* include/debug/multiset.h
	(multiset::multiset<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
	(multiset::multiset<_Iter>(_Iter, _Iter, const _Compare&,
	const _Alloc&)): Likewise.
	* include/debug/string
	(basic_string::basic_string<_Iter>(_Iter, _Iter, const _Alloc&)):
	Likewise.
	* include/debug/unordered_map
	(unordered_map::unordered_map<_Iter>(_Iter, _Iter, const _Alloc&)):
	Likewise.
	(unordered_multimap::unordered_multimap<_Iter>(_Iter, _Iter,
	const _Alloc&)): Likewise.
	* include/debug/unordered_set
	(unordered_set::unordered_set<_Iter>(_Iter, _Iter, const _Alloc&)):
	Likewise.
	(unordered_multiset::unordered_multiset<_Iter>(_Iter, _Iter,
	const _Alloc&)): Likewise.
	* include/debug/vector
	(vector::vector<_Iter>(_Iter, _Iter, const _Alloc&)): Use latter.

From-SVN: r260053
2018-05-08 19:46:59 +00:00
François Dumont a5277405c8 formatter.h (_Error_formatter::_M_function): New.
2018-05-08  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/formatter.h (_Error_formatter::_M_function): New.
	(_Error_formatter(const char*, unsigned int)): Adapt.
	(_Error_formatter::_M_at): Rename in...
	(_Error_formatter::_S_at): ...that and adapt.
	* include/debug/macros.h (_GLIBCXX_DEBUG_VERIFY_AT_F): New.
	(_GLIBCXX_DEBUG_VERIFY_AT, _GLIBCXX_DEBUG_VERIFY): Adapt.
	* src/c++11/debug.cc (_Error_formatter::_M_error): Render _M_function
	when available.

From-SVN: r260052
2018-05-08 19:41:02 +00:00
Jakub Jelinek 85ec4feb11 Update copyright years.
From-SVN: r256169
2018-01-03 11:03:58 +01:00
Jakub Jelinek cbe34bb5ed Update copyright years.
From-SVN: r243994
2017-01-01 13:07:43 +01:00
Jakub Jelinek 818ab71a41 Update copyright years.
From-SVN: r232055
2016-01-04 15:30:50 +01:00
François Dumont 630a286ab6 re PR libstdc++/60519 (Debug mode should check comparators for irreflexivity)
2015-08-24  François Dumont  <fdumont@gcc.gnu.org>

	PR libstdc++/60519
	* include/debug/formatter.h (_Debug_msg_id::__msg_irreflexive_ordering):
	New enum entry.
	* include/debug/functions.h (_Irreflexive_checker): New.
	(__is_irreflexive, __is_irreflexive_pred): New.
	* include/debug/macros.h
	(__glibcxx_check_irreflexive, __glibcxx_check_irreflexive_pred): New
	macros.
	(__glibcxx_check_irreflexive2, __glibcxx_check_irreflexive_pred2): New
	macros limited to post-C++11 mode.
	* include/debug/debug.h
	(__glibcxx_requires_irreflexive, __glibcxx_requires_irreflexive_pred):
	New macros, use latter.
	(__glibcxx_requires_irreflexive2, __glibcxx_requires_irreflexive_pred2):
	Likewise.
	* include/bits/stl_algo.h
	(partial_sort_copy): Add irreflexive debug check.
	(partial_sort_copy): Likewise.
	(lower_bound): Likewise.
	(upper_bound): Likewise.
	(equal_range): Likewise.
	(binary_search): Likewise.
	(inplace_merge): Likewise.
	(includes): Likewise.
	(next_permutation): Likewise.
	(prev_permutation): Likewise.
	(is_sorted_until): Likewise.
	(minmax_element): Likewise.
	(partial_sort): Likewise.
	(nth_element): Likewise.
	(sort): Likewise.
	(merge): Likewise.
	(stable_sort): Likewise.
	(set_union): Likewise.
	(set_intersection): Likewise.
	(set_difference): Likewise.
	(set_symmetric_difference): Likewise.
	(min_element): Likewise.
	(max_element): Likewise.
	* include/bits/stl_algobase.h
	(lower_bound): Likewise.
	(lexicographical_compare): Likewise.
	* include/bits/stl_heap.h
	(push_heap): Likewise.
	(pop_heap): Likewise.
	(make_heap): Likewise.
	(sort_heap): Likewise.
	(is_heap_until): Likewise.
	* testsuite/25_algorithms/lexicographical_compare/debug/
	irreflexive_neg.cc: New.
	* testsuite/25_algorithms/lower_bound/debug/irreflexive.cc: New.
	* testsuite/25_algorithms/partial_sort_copy/debug/irreflexive_neg.cc:
	New.

From-SVN: r227189
2015-08-25 20:27:03 +00:00
François Dumont 25c65938c8 Revert my change to commit with PR reference again.
From-SVN: r227187
2015-08-25 20:22:47 +00:00
François Dumont 41e4e5edce formatter.h (_Debug_msg_id::__msg_irreflexive_ordering): New enum entry.
2015-08-24  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/formatter.h (_Debug_msg_id::__msg_irreflexive_ordering):
	New enum entry.
	* include/debug/functions.h (_Irreflexive_checker): New.
	(__is_irreflexive, __is_irreflexive_pred): New.
	* include/debug/macros.h
	(__glibcxx_check_irreflexive, __glibcxx_check_irreflexive_pred): New
	macros.
	(__glibcxx_check_irreflexive2, __glibcxx_check_irreflexive_pred2): New
	macros limited to post-C++11 mode.
	* include/debug/debug.h
	(__glibcxx_requires_irreflexive, __glibcxx_requires_irreflexive_pred):
	New macros, use latter.
	(__glibcxx_requires_irreflexive2, __glibcxx_requires_irreflexive_pred2):
	Likewise.
	* include/bits/stl_algo.h
	(partial_sort_copy): Add irreflexive debug check.
	(partial_sort_copy): Likewise.
	(lower_bound): Likewise.
	(upper_bound): Likewise.
	(equal_range): Likewise.
	(binary_search): Likewise.
	(inplace_merge): Likewise.
	(includes): Likewise.
	(next_permutation): Likewise.
	(prev_permutation): Likewise.
	(is_sorted_until): Likewise.
	(minmax_element): Likewise.
	(partial_sort): Likewise.
	(nth_element): Likewise.
	(sort): Likewise.
	(merge): Likewise.
	(stable_sort): Likewise.
	(set_union): Likewise.
	(set_intersection): Likewise.
	(set_difference): Likewise.
	(set_symmetric_difference): Likewise.
	(min_element): Likewise.
	(max_element): Likewise.
	* include/bits/stl_algobase.h
	(lower_bound): Likewise.
	(lexicographical_compare): Likewise.
	* include/bits/stl_heap.h
	(push_heap): Likewise.
	(pop_heap): Likewise.
	(make_heap): Likewise.
	(sort_heap): Likewise.
	(is_heap_until): Likewise.
	* testsuite/25_algorithms/lexicographical_compare/debug/
	irreflexive_neg.cc: New.
	* testsuite/25_algorithms/lower_bound/debug/irreflexive.cc: New.
	* testsuite/25_algorithms/partial_sort_copy/debug/irreflexive_neg.cc:
	New.

From-SVN: r227147
2015-08-24 20:21:57 +00:00
François Dumont 24167c42e6 stl_iterator_base_types.h (_Iter_base): Limit definition to pre-C++11 mode.
2015-06-29  François Dumont  <fdumont@gcc.gnu.org>

	* include/bits/stl_iterator_base_types.h (_Iter_base): Limit definition
	to pre-C++11 mode.
	* include/debug/functions.h
	(__gnu_debug::__valid_range, __gnu_debug::__base): Move...
	* include/debug/safe_iterator.h
	(__gnu_debug::_Sequence_traits): New.
	(__gnu_debug::__get_distance_from_begin): New.
	(__gnu_debug::__get_distance_to_end): New.
	(__gnu_debug::_Safe_iterator<>::_M_valid_range): Expose iterator range
	distance information. Add optional check_dereferenceable parameter,
	default true.
	(__gnu_debug::_Distance_precision, __gnu_debug::__get_distance): Move
	default definition...
	(__gnu_debug::__get_distance): New overload for _Safe_iterator.
	(__gnu_debug::__unsafe): Likewise.
	* include/debug/helper_functions.h: ...here. New.
	(__gnu_debug::__unsafe): New helper function to remove safe iterator
	layer.
	* include/debug/stl_iterator.h: New. Include latter.
	* include/bits/stl_iterator.h: Include latter in debug mode.
	* include/debug/stl_iterator.tcc: Adapt.
	* include/debug/safe_local_iterator.h (__gnu_debug::__get_distance): Add
	overload for _Safe_local_iterator.
	(__gnu_debug::__unsafe): Likewise.
	* include/debug/safe_local_iterator.tcc: Adapt.
	* include/debug/macros.h (__glibcxx_check_valid_range2): New.
	(__glibcxx_check_insert_range): Add _Dist parameter.
	(__glibcxx_check_insert_range_after): Likewise.
	(__glibcxx_check_string, __glibcxx_check_string_len): Implement using
	_GLIBCXX_DEBUG_PEDASSERT.
	* include/debug/deque (deque<>::assign): Remove iterator debug layer
	when possible.
	(deque<>::insert): Likewise.
	* include/debug/forward_list (__glibcxx_check_valid_fl_range): New.
	(forward_list<>::splice_after): Use latter.
	(forward_list<>::assign): Remove iterator debug layer when possible.
	(forward_list<>::insert_after): Likewise.
	(__gnu_debug::_Sequence_traits<>): Partial specialization.
	* include/debug/list (list<>::assign): Remove iterator debug layer when
	possible.
	(list<>::insert): Likewise.
	[__gnu_debug::_Sequence_traits<>]: Partial specialization pre C++11 ABI.
	* include/debug/map.h (map<>::insert): Remove iterator debug layer when
	possible.
	* include/debug/multimap.h (multimap<>::insert): Likewise.
	* include/debug/set.h (set<>::insert): Likewise.
	* include/debug/multiset.h (multiset<>::insert): Likewise.
	* include/debug/string (basic_string<>::append, basic_string<>::assign,
	basic_string<>::insert, basic_string<>::replace): Likewise.
	* include/debug/unordered_map
	(unordered_map<>::insert, unordered_multimap<>::insert): Likewise.
	* include/debug/unordered_set
	(unordered_set<>::insert, unordered_multiset<>insert): Likewise.
	* include/debug/vector
	(vector<>::assign, vector<>::insert): Likewise.
	* include/Makefile.am: Add new debug headers.
	* include/Makefile.in: Regenerate.

From-SVN: r225143
2015-06-29 20:17:56 +00:00
Jakub Jelinek 5624e564d2 Update copyright years.
From-SVN: r219188
2015-01-05 13:33:28 +01: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 72d1f255ae re PR libstdc++/60587 (debug-mode -std=c++11 vector::insert(pos, begin, end) dereferences begin too eagerly)
PR libstdc++/60587
	* include/debug/functions.h (_Is_contiguous_sequence): Define.
	(__foreign_iterator): Accept additional iterator. Do not dispatch on
	iterator category.
	(__foreign_iterator_aux2): Likewise. Add overload for iterators
	from different types of debug container. Use _Is_contiguous_sequence
	instead of is_lvalue_reference.
	(__foreign_iterator_aux3): Accept additional iterator. Avoid
	dereferencing past-the-end iterator.
	(__foreign_iterator_aux4): Use const value_type* instead of
	potentially user-defined const_pointer type.
	* include/debug/macros.h (__glibcxx_check_insert_range): Fix comment
	and pass end iterator to __gnu_debug::__foreign_iterator.
	(__glibcxx_check_insert_range_after): Likewise.
	(__glibcxx_check_max_load_factor): Fix comment.
	* include/debug/vector (_Is_contiguous_sequence): Define partial
	specializations.
	* testsuite/23_containers/vector/debug/57779_neg.cc: Remove
	-std=gnu++11 option and unused header.
	* testsuite/23_containers/vector/debug/60587.cc: New.
	* testsuite/23_containers/vector/debug/60587_neg.cc: New.

From-SVN: r208755
2014-03-21 18:54:06 +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 8915a229ad re PR libstdc++/58191 (Can't use boost transform_iterator with _GLIBCXX_DEBUG)
2013-08-30  François Dumont  <fdumont@gcc.gnu.org>

	PR libstdc++/58191
	* include/debug/macros.h (__glibcxx_check_partitioned_lower): Add
	__gnu_debug::__base calls on iterators passed to internal debug
	check.
	(__glibcxx_check_partitioned_lower_pred): Likewise.
	(__glibcxx_check_partitioned_upper): Likewise.
	(__glibcxx_check_partitioned_upper_pred): Likewise.
	(__glibcxx_check_sorted): Likewise.
	(__glibcxx_check_sorted_pred): Likewise.
	(__glibcxx_check_sorted_set): Likewise.
	(__glibcxx_check_sorted_set_pred): Likewise.
	* include/debug/functions.h (__check_partitioned_lower):
	Remove code to detect safe iterators.
	(__check_partitioned_upper): Likewise.
	(__check_sorted): Likewise.

From-SVN: r202119
2013-08-30 20:16:03 +00:00
François Dumont 5720787ada re PR libstdc++/57779 (vector insert fails to diagnose iterators pointing into *this in debug mode)
2013-08-01  François Dumont  <fdumont@gcc.gnu.org>

	PR libstdc++/57779
	* include/debug/formatter.h (_Debug_msg_id): Add
	__msg_insert_itself_range entry.
	* include/debug/functions.h (_Insert_range_from_self_is_safe<>):
	New, indicate container types supporting self range insertion in
	GNU implementation.
	(__foreign_iterator): New, check if an iterator points to a given
	sequence.
	* include/debug/macros.h (__glibcxx_check_insert_range): Add check
	using __foreign_iterator.
	(__gibcxx_check_insert_range_after): Likewise.
	* include/debug/string (_Insert_range_from_self_is_safe<>):
	Partially specialized to mark __gnu_debug::basic_string<> as
	supporting self range insert.
	* include/debug/list (_Insert_range_from_self_is_safe<>):
	Partially specialized to mark std::list as supporting self range
	insert if _GLIBCXX_DEBUG_PEDANTIC is not defined.
	* include/debug/forward_list (_Insert_range_from_self_is_safe<>):
	Likewise.
	* src/c++11/debug.cc (_S_debug_messages): Add
	__msg_insert_itself_range_entry message.
	(_Error_formatter::_Parameter::_M_print_description): Display
	iterator sequence address rather than sequence address when the
	parameter type is an iterator.
	(_Error_formatter::_M_print_word): Enhance behavior when
	displaying a word with an appended '\n'.
	* testsuite/util/debug/checks.h (check_insert4<>): New.
	* testsuite/23_containers/deque/debug/insert5_neg.cc: New.
	* testsuite/23_containers/vector/debug/insert5_neg.cc: Likewise.
	* testsuite/23_containers/vector/debug/insert6_neg.cc: Likewise.
	* testsuite/23_containers/vector/debug/57779_neg.cc: Likewise.
	* testsuite/23_containers/list/debug/insert5_neg.cc: Likewise.
	* testsuite/23_containers/forward_list/debug/insert_after4_neg.cc:
	Likewise.

From-SVN: r201416
2013-08-01 19:54:46 +00:00
Richard Sandiford 405feeb871 Update copyright in libstdc++-v3.
From-SVN: r195701
2013-02-03 17:54:05 +00:00
Jonathan Wakely e77c9aedcd forward_list: Update to meet allocator-aware requirements.
* include/profile/forward_list: Update to meet allocator-aware
	requirements.
	* include/debug/forward_list: Likewise.
	* include/debug/vector: Verify allocators are swapped or equal.
	* include/debug/macros.h (__glibcxx_check_equal_allocs): Define.
	* include/debug/formatter.h: Add new debug message.
	* src/c++11/debug.cc: Likewise.
	* testsuite/23_containers/forward_list/allocator/swap.cc: Do not
	swap containers with non-propagating, non-equal allocators.
	* testsuite/23_containers/vector/allocator/swap.cc: Likewise.

From-SVN: r193186
2012-11-05 21:10:27 +00:00
François Dumont 14cbb5d84c formatter.h (_Debug_msg_id): Add __msg_valid_load_factor.
2012-10-18  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/formatter.h (_Debug_msg_id): Add
	__msg_valid_load_factor.
	* include/debug/macros.h (__glibcxx_check_max_load_factor): New.
	* include/debug/unordered_set
	(unordered_set<>::max_load_factor(float)): Check max load factor
	is positive.
	(unordered_multiset<>::max_load_factor(float)): Likewise.
	* include/debug/unordered_map
	(unordered_map<>::max_load_factor(float)): Likewise.
	(unordered_multimap<>::max_load_factor(float)): Likewise.
	* testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc:
	New.
	* testsuite/23_containers/unordered_multimap/debug/
	max_load_factor_neg.cc: New.
	* testsuite/23_containers/unordered_set/debug/max_load_factor_neg.cc:
	New.
	* testsuite/23_containers/unordered_multiset/debug/
	max_load_factor_neg.cc: New.

From-SVN: r192575
2012-10-18 19:50:37 +00:00
François Dumont 7181e991b5 formatter.h (_Debug_msg_id): Add __msg_bucket_index_oob.
2012-10-16  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/formatter.h (_Debug_msg_id): Add
	__msg_bucket_index_oob.
	* include/debug/macros.h (__glibcxx_check_bucket_index): New.
	* include/debug/unordered_set (unordered_set<>::begin(size_type)):
	Add check on bucket index.
	(unordered_set<>::begin(size_type) const): Likewise.
	(unordered_set<>::cbegin(size_type) const): Likewise.
	(unordered_set<>::end(size_type)): Likewise.
	(unordered_set<>::end(size_type) const): Likewise.
	(unordered_set<>::cend(size_type) const): Likewise.
	(unordered_set<>::bucket_size(size_type)): Likewise.
	(unordered_multiset<>::begin(size_type)): Likewise.
	(unordered_multiset<>::begin(size_type) const): Likewise.
	(unordered_multiset<>::cbegin(size_type) const): Likewise.
	(unordered_multiset<>::end(size_type)): Likewise.
	(unordered_multiset<>::end(size_type) const): Likewise.
	(unordered_multiset<>::cend(size_type) const): Likewise.
	(unordered_multiset<>::bucket_size(size_type)): Likewise.
	* include/debug/unordered_map (unordered_map<>::begin(size_type)):
	Likewise.
	(unordered_map<>::begin(size_type) const): Likewise.
	(unordered_map<>::cbegin(size_type) const): Likewise.
	(unordered_map<>::end(size_type)): Likewise.
	(unordered_map<>::end(size_type) const): Likewise.
	(unordered_map<>::cend(size_type) const): Likewise.
	(unordered_map<>::bucket_size(size_type)): Likewise.
	(unordered_multimap<>::begin(size_type)): Likewise.
	(unordered_multimap<>::begin(size_type) const): Likewise.
	(unordered_multimap<>::cbegin(size_type) const): Likewise.
	(unordered_multimap<>::end(size_type)): Likewise.
	(unordered_multimap<>::end(size_type) const): Likewise.
	(unordered_multimap<>::cend(size_type) const): Likewise.
	(unordered_multimap<>::bucket_size(size_type)): Likewise.
	* testsuite/23_containers/unordered_map/debug/bucket_size_neg.cc:
	New.
	* testsuite/23_containers/unordered_map/debug/begin1_neg.cc: New.
	* testsuite/23_containers/unordered_map/debug/begin2_neg.cc: New.
	* testsuite/23_containers/unordered_map/debug/cbegin_neg.cc: New.
	* testsuite/23_containers/unordered_map/debug/end1_neg.cc: New.
	* testsuite/23_containers/unordered_map/debug/end2_neg.cc: New.
	* testsuite/23_containers/unordered_map/debug/cend_neg.cc: New.
	* testsuite/23_containers/unordered_multimap/debug/bucket_size_neg.cc:
	New.
	* testsuite/23_containers/unordered_multimap/debug/begin1_neg.cc: New.
	* testsuite/23_containers/unordered_multimap/debug/begin2_neg.cc: New.
	* testsuite/23_containers/unordered_multimap/debug/cbegin_neg.cc: New.
	* testsuite/23_containers/unordered_multimap/debug/end1_neg.cc: New.
	* testsuite/23_containers/unordered_multimap/debug/end2_neg.cc: New.
	* testsuite/23_containers/unordered_multimap/debug/cend_neg.cc: New.
	* testsuite/23_containers/unordered_set/debug/bucket_size_neg.cc:
	New.
	* testsuite/23_containers/unordered_set/debug/begin1_neg.cc: New.
	* testsuite/23_containers/unordered_set/debug/begin2_neg.cc: New.
	* testsuite/23_containers/unordered_set/debug/cbegin_neg.cc: New.
	* testsuite/23_containers/unordered_set/debug/end1_neg.cc: New.
	* testsuite/23_containers/unordered_set/debug/end2_neg.cc: New.
	* testsuite/23_containers/unordered_set/debug/cend_neg.cc: New.
	* testsuite/23_containers/unordered_multiset/debug/bucket_size_neg.cc:
	New.
	* testsuite/23_containers/unordered_multiset/debug/begin1_neg.cc: New.
	* testsuite/23_containers/unordered_multiset/debug/begin2_neg.cc: New.
	* testsuite/23_containers/unordered_multiset/debug/cbegin_neg.cc: New.
	* testsuite/23_containers/unordered_multiset/debug/end1_neg.cc: New.
	* testsuite/23_containers/unordered_multiset/debug/end2_neg.cc: New.
	* testsuite/23_containers/unordered_multiset/debug/cend_neg.cc: New.

From-SVN: r192512
2012-10-16 19:57:03 +00:00
François Dumont 0545ebf2dc re PR libstdc++/53263 (priority_queue is very slow if -D_GLIBCXX_DEBUG is used)
2012-05-11  François Dumont  <fdumont@gcc.gnu.org>

	PR libstdc++/53263
	* include/debug/safe_iterator.h (__gnu_debug::__base): Move...
	* include/debug/functions.h: ... Here. Add debug function
	overloads to perform checks on normal iterators when possible.
	* include/debug/macros.h (__glibcxx_check_heap)
	(__glibcxx_check_heap_pred): Use __gnu_debug::__base on iterator range.

From-SVN: r187414
2012-05-11 19:21:31 +00:00
Paolo Carlini 739fd6a6b3 formatter.h (enum _Debug_msg_id): Add __msg_self_move_assign.
2012-03-09  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/debug/formatter.h (enum _Debug_msg_id): Add
	__msg_self_move_assign.
	* include/debug/macros.h (__glibcxx_check_self_move_assign): Add.
	* src/c++11/debug.cc (_S_debug_messages): Update.
	* include/debug/safe_iterator.h (_Safe_iterator<>::operator=
	(_Safe_iterator&&)): Add check for self move assignment.
	* include/debug/set.h: Likewise.
	* include/debug/unordered_map: Likewise.
	* include/debug/multiset.h: Likewise.
	* include/debug/forward_list: Likewise.
	* include/debug/unordered_set: Likewise.
	* include/debug/vector: Likewise.
	* include/debug/map.h: Likewise.
	* include/debug/deque: Likewise.
	* include/debug/string: Likewise.
	* include/debug/list: Likewise.
	* include/debug/multimap.h: Likewise.
	* testsuite/21_strings/debug/self_move_assign_neg.cc: New.
	* testsuite/21_strings/debug/iterator_self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/unordered_map/debug/self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/unordered_map/debug/
	iterator_self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/multimap/debug/self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/multimap/debug/
	iterator_self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/set/debug/self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/set/debug/iterator_self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/unordered_multimap/debug/
	self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/unordered_multimap/debug/
	iterator_self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/forward_list/debug/self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/forward_list/debug/
	iterator_self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/unordered_set/debug/self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/unordered_set/debug/
	iterator_self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/vector/debug/self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/vector/debug/
	iterator_self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/deque/debug/self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/deque/debug/iterator_self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/multiset/debug/self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/multiset/debug/
	iterator_self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/list/debug/self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/list/debug/iterator_self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/unordered_multiset/debug/
	self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/unordered_multiset/debug/
	iterator_self_move_assign_neg.cc: Likewise.
	* testsuite/23_containers/map/debug/self_move_assign_neg.cc:
	Likewise.
	* testsuite/23_containers/map/debug/iterator_self_move_assign_neg.cc:
	Likewise.

From-SVN: r185134
2012-03-09 10:37:34 +00:00
Jonathan Wakely a8028a3ee8 macros.h (__glibcxx_check_non_empty_range): Define.
* include/debug/macros.h (__glibcxx_check_non_empty_range): Define.
	* include/debug/debug.h (__glibcxx_requires_non_empty_range): Define.
	* include/debug/formatter.h (__msg_non_empty_range): Add.
	* src/debug.cc: Message text for __msg_non_empty_range.
	* include/bits/stl_heap.h (pop_heap): Check for non-empty range.
	* testsuite/25_algorithms/pop_heap/empty_neg.cc: New.

From-SVN: r181970
2011-12-03 15:35:35 +00:00
François Dumont f5886803ed macro.h (_GLIBCXX_DEBUG_VERIFY_AT): New.
2011-05-07  François Dumont  <francois.cppdevs@free.fr>

	* include/debug/macro.h (_GLIBCXX_DEBUG_VERIFY_AT): New.
	(_GLICXX_DEBUG_VERIFY): Use latter.
	* include/ext/pb_ds/detail/resize_policy/
	hash_load_check_resize_trigger_imp.hpp: Emit assertion on the line
	containing the original assert call.
	* include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp,
	find_fn_imps.hpp, insert_fn_imps.hpp, binomial_heap_base_.hpp,
	constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
	split_join_fn_imps.hpp: Likewise.
	* include/ext/pb_ds/detail/cc_hash_table_map_/
	erase_store_hash_fn_imps.hpp, insert_no_store_hash_fn_imps.hpp,
	find_fn_imps.hpp, insert_store_hash_fn_imps.hpp, debug_fn_imps.hpp,
	debug_no_store_hash_fn_imps.hpp, cc_ht_map_.hpp, resize_fn_imps.hpp,
	constructor_destructor_fn_imps.hpp, debug_store_hash_fn_imps.hpp,
	erase_no_store_hash_fn_imps.hpp: Likewise.
	* include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp,
	insert_join_fn_imps.hpp, pat_trie_/head.hpp, debug_fn_imps.hpp,
	constructors_destructor_fn_imps.hpp, pat_trie_.hpp, split_fn_imps.hpp,
	leaf.hpp, erase_fn_imps.hpp, node_base.hpp, internal_node.hpp:
	Likewise.
	* include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp,
	r_erase_fn_imps.hpp, constructors_destructor_fn_imps.hpp,
	debug_fn_imps.hpp, rotate_fn_imps.hpp, erase_fn_imps.hpp,
	bin_search_tree_.hpp, insert_fn_imps.hpp, split_join_fn_imps.hpp:
	Likewise.
	* include/ext/pb_ds/detail/gp_hash_table_map_/
	erase_store_hash_fn_imps.hpp, insert_no_store_hash_fn_imps.hpp,
	find_fn_imps.hpp, gp_ht_map_.hpp, insert_store_hash_fn_imps.hpp,
	debug_fn_imps.hpp, erase_fn_imps.hpp, debug_no_store_hash_fn_imps.hpp,
	resize_fn_imps.hpp, constructor_destructor_fn_imps.hpp,
	debug_store_hash_fn_imps.hpp, erase_no_store_hash_fn_imps.hpp:
	Likewise.
	* include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp,
	constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
	erase_fn_imps.hpp, insert_fn_imps.hpp, binary_heap_.hpp,
	resize_policy.hpp, split_join_fn_imps.hpp: Likewise.
	* include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp,
	find_fn_imps.hpp, insert_fn_imps.hpp,
	constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
	pairing_heap_.hpp, split_join_fn_imps.hpp: Likewise.
	* include/ext/pb_ds/detail/binomial_heap_/
	constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
	binomial_heap_.hpp: Likewise.
	* include/ext/pb_ds/detail/left_child_next_sibling_heap_/
	erase_fn_imps.hpp, left_child_next_sibling_heap_.hpp,
	constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp: Likewise.
	* include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp,
	find_fn_imps.hpp, thin_heap_.hpp, insert_fn_imps.hpp,
	constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
	split_join_fn_imps.hpp: Likewise.
	* include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp,
	ov_tree_map_.hpp, constructors_destructor_fn_imps.hpp,
	debug_fn_imps.hpp, split_join_fn_imps.hpp, info_fn_imps.hpp: Likewise.
	* include/ext/pb_ds/detail/debug_map_base.hpp: Likewise.
	* include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp,
	find_fn_imps.hpp, insert_fn_imps.hpp,
	constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp,
	splay_fn_imps.hpp, split_join_fn_imps.hpp, splay_tree_.hpp: Likewise.
	* include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp,
	find_fn_imps.hpp, lu_map_.hpp, constructor_destructor_fn_imps.hpp,
	insert_fn_imps.hpp, debug_fn_imps.hpp: Likewise.
	* include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp,
	rc_binomial_heap_.hpp, insert_fn_imps.hpp,
	constructors_destructor_fn_imps.hpp, debug_fn_imps.hpp, rc.hpp,
	split_join_fn_imps.hpp: Likewise.
	* include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp,
	insert_fn_imps.hpp, constructors_destructor_fn_imps.hpp,
	debug_fn_imps.hpp, rb_tree_.hpp, split_join_fn_imps.hpp: Likewise.
	* include/ext/pb_ds/hash_policy.hpp: Likewise.

From-SVN: r173529
2011-05-07 13:45:24 +00:00
François Dumont c543b18ae2 string (basic_string::insert): Add iterator check and pass normal iterator to normal insert.
2011-02-19  François Dumont  <francois.cppdevs@free.fr>

        * include/debug/string (basic_string::insert): Add iterator check and
        pass normal iterator to normal insert.
        * include/debug/macros.h (__glibcxx_check_heap,
        __glibcxx_check_heap_pred): Remove __glibcxx_check_valid_range,
        already done.

From-SVN: r170322
2011-02-19 20:51:43 +00:00
Paolo Carlini b8b4301eec [multiple changes]
2010-09-29  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/Makefile.am: Add debug/forward_list.
	* include/Makefile.in: Regenerate.

	* testsuite/util/testsuite_container_traits.h (traits_base):
	Add has_erase_after and hash_insert_after typedefs.
	(traits<forward_list<>>): Adjust.
	* testsuite/util/exception/safety.h (erase_point, erase_range,
	insert_point): Deal correctly with forward_list.
	* include/Makefile.am: Add.

2010-09-29  François Dumont  <francois.cppdevs@free.fr>

	* src/debug.cc: Add forward_list specific debug messages.
	* include/debug/forward_list: New.
	* include/debug/formatter.h: Add debug message ids and before begin
	iterator state.
	* include/debug/macros.h (__glibcxx_check_insert_after,
	__glibcxx_check_insert_range_after, __glibcxx_check_erase_after,
	__glibcxx_check_erase_range_after): Add.
	* include/debug/safe_iterator.h (_BeforeBeginHelper): Add.
	(_Safe_iterator<>::_M_before_dereferenceable,
	_Safe_iterator<>::_M_is_before_begin): Add.
	(_Safe_iterator<>::_M_dereferenceable, _Safe_iterator<>::_M_is_end,
	_Safe_iterator<>::_M_incrementable): Adjust.
	* include/std/forward_list: Include debug/forward when _GLIBCXX_DEBUG
	defined.
	* include/bits/forward_list.h, forward_list.tcc: Put in std::__norm
	when debug mode is active.
	* testsuite/23_containers/forward_list/capacity/1.cc: Fix to compile
	even in debug mode.
	* testsuite/23_containers/forward_list/debug/erase_after1.cc,
	erase_after2.cc, erase_after3.cc, erase_after4.cc, erase_after5.cc,
	insert_after1.cc,erase_after6.cc, erase_after7.cc, insert_after2.cc,
	erase_after8.cc, insert_after3.cc, erase_after9.cc: New.

From-SVN: r164717
2010-09-29 11:56:34 +00:00
Benjamin Kosnik 2a60a9f652 re PR libstdc++/42460 (man page errors for generated libstdc++ man pages)
2010-02-04  Benjamin Kosnik  <bkoz@redhat.com>

	PR libstdc++/42460
	* doc/doxygen/user.cfg.in: Update file list.
	* include/debug/safe_sequence.h: Doxygen markup fixes for '' and "".
	* include/debug/safe_base.h: Same.
	* include/debug/macros.h: Same.
	* include/tr1_impl/regex: Same.
	* include/std/iostream: Same.
	* include/std/streambuf: Same.
	* include/std/bitset: Same.
	* include/std/iosfwd: Same.
	* include/std/limits: Same.
	* include/std/fstream: Same.
	* include/std/istream: Same.
	* include/std/ostream: Same.
	* include/std/sstream: Same.
	* include/parallel/multiway_merge.h: Same.
	* include/parallel/for_each.h: Same.
	* include/parallel/workstealing.h: Same.
	* include/parallel/omp_loop_static.h: Same.
	* include/parallel/omp_loop.h: Same.
	* include/c_std/csignal: Same.
	* include/c_std/cstdlib: Same.
	* include/c_std/cstdio: Same.
	* include/c_std/cstdarg: Same.
	* include/c_std/cctype: Same.
	* include/c_std/cerrno: Same.
	* include/c_std/cmath: Same.
	* include/c_std/ciso646: Same.
	* include/c_std/ctime: Same.
	* include/c_std/clocale: Same.
	* include/c_std/climits: Same.
	* include/c_std/cassert: Same.
	* include/c_std/csetjmp: Same.
	* include/c_std/cwchar: Same.
	* include/c_std/cfloat: Same.
	* include/c_std/cstring: Same.
	* include/c_std/cstddef: Same.
	* include/c_std/cwctype: Same.
	* include/profile/iterator_tracker.h: Same.
	* include/profile/impl/profiler_trace.h: Same.
	* include/ext/vstring.h: Same.
	* include/ext/algorithm: Same.
	* include/ext/pb_ds/detail/pat_trie_/pat_trie_.h.pp: Same.
	* include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.h.pp: Same.
	* include/ext/pb_ds/detail/type_utils.hpp: Same.
	* include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp: Same
	* include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp: Same.
	* include/ext/rc_string_base.h: Same.
	* include/ext/stdio_sync_filebuf.h: Same.
	* include/ext/functional: Same.
	* include/ext/mt_allocator.h: Same.
	* include/bits/basic_ios.h: Same.
	* include/bits/stl_map.h: Same.
	* include/bits/stl_algobase.h: Same.
	* include/bits/stl_queue.h: Same.
	* include/bits/locale_classes.h: Same.
	* include/bits/stl_set.h: Same.
	* include/bits/locale_facets.h: Same.
	* include/bits/stl_stack.h: Same.
	* include/bits/stl_iterator_base_types.h: Same.
	* include/bits/basic_string.h: Same.
	* include/bits/stl_multimap.h: Same.
	* include/bits/ios_base.h: Same.
	* include/bits/stl_deque.h: Same.
	* include/bits/stl_multiset.h: Same.
	* include/bits/stl_iterator_base_funcs.h: Same.
	* include/bits/char_traits.h: Same.
	* include/bits/stl_algo.h: Same.
	* include/bits/stl_iterator.h: Same.
	* include/bits/stl_tempbuf.h: Same.
	* include/bits/random.tcc: Same.
	* include/bits/stl_function.h: Same.
	* include/bits/cpp_type_traits.h: Same.
	* include/bits/random.h: Same.
	* include/bits/allocator.h: Same.
	* include/bits/locale_facets_nonio.h: Same.
	* include/c_global/csignal: Same.
	* include/c_global/cstdlib: Same.
	* include/c_global/cstdio: Same.
	* include/c_global/cstdarg: Same.
	* include/c_global/cctype: Same.
	* include/c_global/cerrno: Same.
	* include/c_global/cmath: Same.
	* include/c_global/ciso646: Same.
	* include/c_global/ctime: Same.
	* include/c_global/clocale: Same.
	* include/c_global/climits: Same.
	* include/c_global/cassert: Same.
	* include/c_global/csetjmp: Same.
	* include/c_global/cwchar: Same.
	* include/c_global/cfloat: Same.
	* include/c_global/cstring: Same.
	* include/c_global/cstddef: Same.
	* include/c_global/cwctype: Same.
	* include/tr1/hypergeometric.tcc: Same.
	* include/tr1/random.tcc: Same.
	* include/tr1/functional: Same.
	* include/tr1/random.h: Same.
	* include/backward/auto_ptr.h: Same.
	* include/backward/binders.h: Same.
	* testsuite/23_containers/deque/requirements/dr438/assign_neg.cc:
	Adjust line numbers.
	* testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Same.
	* testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc:
	Same.
	* testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc:
	Same.

From-SVN: r156502
2010-02-04 18:20:34 +00:00
Jonathan Wakely 79e2c7b01c macros.h: Replace @tbd with valid doxygen tag @todo.
2009-06-23  Jonathan Wakely  <jwakely.gcc@gmail.com>

	* include/debug/macros.h: Replace @tbd with valid doxygen tag @todo.
	* include/std/ratio: Typo in comment.

From-SVN: r148861
2009-06-23 18:51:48 +01:00
Jakub Jelinek 748086b7b2 Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
From-SVN: r145841
2009-04-09 17:00:19 +02:00
Paolo Carlini a4c07f2d9f re PR libstdc++/34730 (Legal program doesn't compile with -D_GLIBCXX_DEBUG)
2008-01-12  Paolo Carlini  <pcarlini@suse.de>

	PR libstdc++/34730
	* include/debug/functions.h (__check_sorted_set,
	__check_sorted_set_aux): Add.
	(__check_sorted): Check StrictWeakOrdering.
	* include/debug/macros.h (__glibcxx_check_strict_weak_ordering,
	__glibcxx_check_strict_weak_ordering_pred): Remove.
	(__glibcxx_check_sorted, __glibcxx_check_sorted_pred): Adjust.
	(__glibcxx_check_sorted_set, __glibcxx_check_sorted_set_pred): Add.
	* include/debug/debug.h (__glibcxx_requires_sorted_set,
	__glibcxx_requires_sorted_set_pred): Add.
	* include/bits/stl_algo.h (merge, includes, set_union,
	set_intersection, set_difference, set_symmetric_difference):
	Adjust, use __glibcxx_requires_sorted_set* instead. 
	* testsuite/25_algorithms/set_intersection/34730.cc: New.

From-SVN: r131500
2008-01-13 01:34:58 +00:00
Paolo Carlini f5ad31630d re PR libstdc++/33613 (compilation inconsistency upper_bound vs lower_bound with -D_GLIBCXX_DEBUG)
2007-10-03  Paolo Carlini  <pcarlini@suse.de>

	PR libstdc++/33613
	* include/debug/functions.h (__check_partitioned): Rename to...
	(__check_partioned_lower): ... this.
	(__check_partioned_upper): Add.
	* include/debug/macros.h (__glibcxx_check_partitioned): Rename to...
	(__glibcxx_check_partitioned_lower): ... this, adjust.
	(__glibcxx_check_partitioned_upper): Add.
	* include/debug/debug.h (__glibcxx_requires_partitioned): Rename to...
	(__glibcxx_requires_partitioned_lower): ... this, adjust.
	(__glibcxx_requires_partitioned_upper): Add.
	* include/bits/stl_algo.h (lower_bound, upper_bound, equal_range,
	binary search): Use the above.
	* testsuite/25_algorithms/lower_bound/33613.cc: New.
	* testsuite/25_algorithms/upper_bound/33613.cc: Likewise.

From-SVN: r128974
2007-10-03 00:34:40 +00:00