gcc/libstdc++-v3/testsuite/25_algorithms
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
..
adjacent_find Update copyright years. 2021-01-04 10:26:59 +01:00
advance/istreambuf_iterators Update copyright years. 2021-01-04 10:26:59 +01:00
all_of Update copyright years. 2021-01-04 10:26:59 +01:00
any_of Update copyright years. 2021-01-04 10:26:59 +01:00
binary_search Update copyright years. 2021-01-04 10:26:59 +01:00
clamp Update copyright years. 2021-01-04 10:26:59 +01:00
copy libstdc++: [_GLIBCXX_DEBUG] Fix management of __dp_sign_max_size [PR 99402] 2021-04-09 21:46:35 +02:00
copy_backward Update copyright years. 2021-01-04 10:26:59 +01:00
copy_if Update copyright years. 2021-01-04 10:26:59 +01:00
copy_n Update copyright years. 2021-01-04 10:26:59 +01:00
count Update copyright years. 2021-01-04 10:26:59 +01:00
count_if Update copyright years. 2021-01-04 10:26:59 +01:00
equal Update copyright years. 2021-01-04 10:26:59 +01:00
equal_range Update copyright years. 2021-01-04 10:26:59 +01:00
fill Update copyright years. 2021-01-04 10:26:59 +01:00
fill_n Update copyright years. 2021-01-04 10:26:59 +01:00
find Update copyright years. 2021-01-04 10:26:59 +01:00
find_end Update copyright years. 2021-01-04 10:26:59 +01:00
find_first_of Update copyright years. 2021-01-04 10:26:59 +01:00
find_if Update copyright years. 2021-01-04 10:26:59 +01:00
find_if_not Update copyright years. 2021-01-04 10:26:59 +01:00
for_each Update copyright years. 2021-01-04 10:26:59 +01:00
generate Update copyright years. 2021-01-04 10:26:59 +01:00
generate_n Update copyright years. 2021-01-04 10:26:59 +01:00
headers Update copyright years. 2021-01-04 10:26:59 +01:00
heap Update copyright years. 2021-01-04 10:26:59 +01:00
includes Update copyright years. 2021-01-04 10:26:59 +01:00
inplace_merge Update copyright years. 2021-01-04 10:26:59 +01:00
is_heap Update copyright years. 2021-01-04 10:26:59 +01:00
is_heap_until Update copyright years. 2021-01-04 10:26:59 +01:00
is_partitioned Update copyright years. 2021-01-04 10:26:59 +01:00
is_permutation Update copyright years. 2021-01-04 10:26:59 +01:00
is_sorted Update copyright years. 2021-01-04 10:26:59 +01:00
is_sorted_until Update copyright years. 2021-01-04 10:26:59 +01:00
iter_swap Update copyright years. 2021-01-04 10:26:59 +01:00
lexicographical_compare Update copyright years. 2021-01-04 10:26:59 +01:00
lexicographical_compare_three_way Update copyright years. 2021-01-04 10:26:59 +01:00
lower_bound Update copyright years. 2021-01-04 10:26:59 +01:00
make_heap Update copyright years. 2021-01-04 10:26:59 +01:00
max Update copyright years. 2021-01-04 10:26:59 +01:00
max_element Update copyright years. 2021-01-04 10:26:59 +01:00
merge Update copyright years. 2021-01-04 10:26:59 +01:00
min Update copyright years. 2021-01-04 10:26:59 +01:00
min_element Update copyright years. 2021-01-04 10:26:59 +01:00
minmax Update copyright years. 2021-01-04 10:26:59 +01:00
minmax_element Update copyright years. 2021-01-04 10:26:59 +01:00
mismatch Update copyright years. 2021-01-04 10:26:59 +01:00
move Update copyright years. 2021-01-04 10:26:59 +01:00
move_backward Update copyright years. 2021-01-04 10:26:59 +01:00
next_permutation Update copyright years. 2021-01-04 10:26:59 +01:00
none_of Update copyright years. 2021-01-04 10:26:59 +01:00
nth_element Update copyright years. 2021-01-04 10:26:59 +01:00
partial_sort Update copyright years. 2021-01-04 10:26:59 +01:00
partial_sort_copy Update copyright years. 2021-01-04 10:26:59 +01:00
partition Update copyright years. 2021-01-04 10:26:59 +01:00
partition_copy Update copyright years. 2021-01-04 10:26:59 +01:00
partition_point Update copyright years. 2021-01-04 10:26:59 +01:00
pop_heap Update copyright years. 2021-01-04 10:26:59 +01:00
prev_permutation Update copyright years. 2021-01-04 10:26:59 +01:00
pstl Update copyright years. 2021-01-04 10:26:59 +01:00
push_heap Update copyright years. 2021-01-04 10:26:59 +01:00
random_shuffle Update copyright years. 2021-01-04 10:26:59 +01:00
remove Update copyright years. 2021-01-04 10:26:59 +01:00
remove_copy Update copyright years. 2021-01-04 10:26:59 +01:00
remove_copy_if Update copyright years. 2021-01-04 10:26:59 +01:00
remove_if Update copyright years. 2021-01-04 10:26:59 +01:00
replace Update copyright years. 2021-01-04 10:26:59 +01:00
replace_copy Update copyright years. 2021-01-04 10:26:59 +01:00
replace_copy_if Update copyright years. 2021-01-04 10:26:59 +01:00
replace_if Update copyright years. 2021-01-04 10:26:59 +01:00
reverse Update copyright years. 2021-01-04 10:26:59 +01:00
reverse_copy Update copyright years. 2021-01-04 10:26:59 +01:00
rotate Update copyright years. 2021-01-04 10:26:59 +01:00
rotate_copy Update copyright years. 2021-01-04 10:26:59 +01:00
sample Update copyright years. 2021-01-04 10:26:59 +01:00
search Update copyright years. 2021-01-04 10:26:59 +01:00
search_n Update copyright years. 2021-01-04 10:26:59 +01:00
set_difference Update copyright years. 2021-01-04 10:26:59 +01:00
set_intersection Update copyright years. 2021-01-04 10:26:59 +01:00
set_symmetric_difference Update copyright years. 2021-01-04 10:26:59 +01:00
set_union Update copyright years. 2021-01-04 10:26:59 +01:00
shift_left Update copyright years. 2021-01-04 10:26:59 +01:00
shift_right Update copyright years. 2021-01-04 10:26:59 +01:00
shuffle Update copyright years. 2021-01-04 10:26:59 +01:00
sort Update copyright years. 2021-01-04 10:26:59 +01:00
sort_heap Update copyright years. 2021-01-04 10:26:59 +01:00
stable_partition Update copyright years. 2021-01-04 10:26:59 +01:00
stable_sort Update copyright years. 2021-01-04 10:26:59 +01:00
swap Update copyright years. 2021-01-04 10:26:59 +01:00
swap_ranges Update copyright years. 2021-01-04 10:26:59 +01:00
transform Update copyright years. 2021-01-04 10:26:59 +01:00
unique Update copyright years. 2021-01-04 10:26:59 +01:00
unique_copy Update copyright years. 2021-01-04 10:26:59 +01:00
upper_bound Update copyright years. 2021-01-04 10:26:59 +01:00
constexpr_macro.cc Update copyright years. 2021-01-04 10:26:59 +01:00
cpp_lib_constexpr.cc Update copyright years. 2021-01-04 10:26:59 +01:00