From: Simon Marchi Date: Wed, 3 Sep 2025 14:50:04 +0000 (-0400) Subject: gdbsupport: remove variadicity from filtered_iterator constructor X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a65d188303c757b9e7bbb461c74100b2994783f6;p=thirdparty%2Fbinutils-gdb.git gdbsupport: remove variadicity from filtered_iterator constructor For the same reason as the previous patches (making things easier to understand, at the cost of being more explicit), remove filtered_iterator's variadic constructor, forcing the callers to pass already built underlying iterators. Change-Id: I1a9b6d43f3f087579b61b90b6f8f4128d66e19a1 Approved-By: Tom Tromey --- diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 6ee0cde10df..bfcfc2404b0 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -723,8 +723,13 @@ all_breakpoints_safe () tracepoint_range all_tracepoints () { - return tracepoint_range (tracepoint_iterator (breakpoint_chain.begin ()), - tracepoint_iterator (breakpoint_chain.end ())); + breakpoint_iterator begin (breakpoint_chain.begin ()); + breakpoint_iterator end (breakpoint_chain.end ()); + tracepoint_iterator tracepoint_begin (std::move (begin), end); + tracepoint_iterator tracepoint_end (end, end); + + return tracepoint_range (std::move (tracepoint_begin), + std::move (tracepoint_end)); } /* Array is sorted by bp_location_ptr_is_less_than - primarily by the diff --git a/gdb/inferior.h b/gdb/inferior.h index 2e396ae11ce..5b499a207b4 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -487,9 +487,10 @@ public: */ inf_non_exited_threads_range non_exited_threads () { - inf_non_exited_threads_iterator begin (this->thread_list.begin ()); + inf_threads_iterator begin (this->thread_list.begin ()); + inf_non_exited_threads_iterator filtered_begin (std::move (begin)); - return inf_non_exited_threads_range (std::move (begin)); + return inf_non_exited_threads_range (std::move (filtered_begin)); } /* Like inferior::threads(), but returns a range adapter that can be @@ -860,9 +861,10 @@ all_inferiors (process_stratum_target *proc_target = nullptr) inline all_non_exited_inferiors_range all_non_exited_inferiors (process_stratum_target *proc_target = nullptr) { - all_non_exited_inferiors_iterator begin (proc_target, inferior_list); + all_inferiors_iterator begin (proc_target, inferior_list); + all_non_exited_inferiors_iterator filtered_begin (std::move (begin)); - return all_non_exited_inferiors_range (std::move (begin)); + return all_non_exited_inferiors_range (std::move (filtered_begin)); } /* Prune away automatically added inferiors that aren't required diff --git a/gdb/thread-iter.h b/gdb/thread-iter.h index 1d4c9b2c7d2..cdf9b2df530 100644 --- a/gdb/thread-iter.h +++ b/gdb/thread-iter.h @@ -237,7 +237,12 @@ public: {} all_non_exited_threads_iterator begin () const - { return all_non_exited_threads_iterator (m_filter_target, m_filter_ptid); } + { + all_matching_threads_iterator begin (m_filter_target, m_filter_ptid); + + return all_non_exited_threads_iterator (std::move (begin)); + } + all_non_exited_threads_iterator end () const { return all_non_exited_threads_iterator (); } diff --git a/gdb/unittests/filtered_iterator-selftests.c b/gdb/unittests/filtered_iterator-selftests.c index c04cae4963e..455caf2649c 100644 --- a/gdb/unittests/filtered_iterator-selftests.c +++ b/gdb/unittests/filtered_iterator-selftests.c @@ -115,12 +115,15 @@ test_filtered_iterator () std::vector even_ints; const std::vector expected_even_ints { 4, 4, 6, 8 }; + int_array_iterator begin (array, ARRAY_SIZE (array)); + int_array_iterator end; filtered_iterator - iter (array, ARRAY_SIZE (array)); - filtered_iterator end; + filtered_iter (begin, end); + filtered_iterator + filtered_end (end, end); - for (; iter != end; ++iter) - even_ints.push_back (*iter); + for (; filtered_iter != filtered_end; ++filtered_iter) + even_ints.push_back (*filtered_iter); SELF_CHECK (even_ints == expected_even_ints); } @@ -152,10 +155,12 @@ test_filtered_iterator_eq () { int array[] = { 4, 4, 5, 6, 7, 8, 9 }; + int_array_iterator begin (array, ARRAY_SIZE (array)); + int_array_iterator end; filtered_iterator - iter1(array, ARRAY_SIZE (array)); + iter1 (begin, end); filtered_iterator - iter2(array, ARRAY_SIZE (array)); + iter2 (begin, end); /* They start equal. */ SELF_CHECK (iter1 == iter2); diff --git a/gdbsupport/filtered-iterator.h b/gdbsupport/filtered-iterator.h index 4952582358b..872bdebdbf0 100644 --- a/gdbsupport/filtered-iterator.h +++ b/gdbsupport/filtered-iterator.h @@ -37,18 +37,19 @@ public: using difference_type = typename std::iterator_traits::difference_type; - /* Construct by forwarding all arguments to the underlying - iterator. */ - template - explicit filtered_iterator (Args &&...args) - : m_it (std::forward (args)...) - { skip_filtered (); } + /* Construct by providing the begin underlying iterators. The end iterator + is default-constructed. */ + filtered_iterator (BaseIterator begin) + : filtered_iterator (std::move (begin), BaseIterator {}) + {} + /* Construct by providing begin and end underlying iterators. */ filtered_iterator (BaseIterator begin, BaseIterator end) : m_it (std::move (begin)), m_end (std::move (end)) { skip_filtered (); } - /* Create a one-past-end iterator. */ + /* Create a one-past-end iterator. The underlying end iterator is obtained + by default-constructing. */ filtered_iterator () = default; /* Need these as the variadic constructor would be a better match