gcc/libstdc++-v3/include
Patrick Palka 8661f4faa8 libstdc++: Fix ranges::search_n for random access iterators [PR97828]
My ranges transcription of the std::search_n implementation for random
access iterators missed a crucial part of the algorithm which the
existing tests didn't exercise.  When __remainder is less than __count
at the start of an iteration of the outer while loop, it means we're
continuing a partial match of __count - __remainder elements from the
previous iteration.  If at the end of the iteration we don't complete
this partial match, we need to reset __remainder so that it's only
offset by the size of the most recent partial match before starting the
next iteration.

This patch fixes this appropriately, mirroring how it's done in the
corresponding std::search_n implementation.

libstdc++-v3/ChangeLog:

	PR libstdc++/97828
	* include/bits/ranges_algo.h (__search_n_fn::operator()): Check
	random_access_iterator before using the backtracking
	implementation.  When the backwards scan fails prematurely,
	reset __remainder appropriately.
	* testsuite/25_algorithms/search_n/97828.cc: New test.
2020-11-17 10:28:20 -05:00
..
backward libstdc++: Add deprecated attributes to old iostream members 2020-08-19 12:13:23 +01:00
bits libstdc++: Fix ranges::search_n for random access iterators [PR97828] 2020-11-17 10:28:20 -05:00
c Update copyright years. 2020-01-01 12:51:42 +01:00
c_compatibility Update copyright years. 2020-01-01 12:51:42 +01:00
c_global libstdc++: Add parentheses around assignments used as truth values 2020-09-10 17:09:16 +01:00
c_std Update copyright years. 2020-01-01 12:51:42 +01:00
debug libstdc++: Remove <debug/array> 2020-11-09 21:20:01 +01:00
decimal Update copyright years. 2020-01-01 12:51:42 +01:00
experimental libstdc++: Remove <debug/array> 2020-11-09 21:20:01 +01:00
ext libstdc++: Simplify __numeric_traits definition 2020-11-12 14:36:39 +00:00
parallel libstdc++: Define new C++17 std::search overload for Parallel Mode [PR 94971] 2020-11-04 13:36:32 +00:00
precompiled libstdc++: Add c++2a <syncstream> 2020-11-02 10:41:32 -08:00
pstl libstdc++: Rebase include/pstl to current upstream 2020-10-21 06:11:28 -07:00
std libstdc++: Optimise std::future::wait_for and fix futex polling 2020-11-12 23:47:04 +00:00
tr1 libstdc++: Prevent deprecation warnings from <tr1/shared_ptr> 2020-10-29 22:47:22 +00:00
tr2 Update copyright years. 2020-01-01 12:51:42 +01:00
Makefile.am libstdc++: Remove <debug/array> 2020-11-09 21:20:01 +01:00
Makefile.in libstdc++: Remove <debug/array> 2020-11-09 21:20:01 +01:00