libstdc++: Fix some C++20 algorithms to work in parallel mode
Some new algorithms need to use _GLIBCXX_STD_A to refer to the "normal" version of the algorithm, to workaround the namespace dance done for parallel mode. PR libstdc++/94971 (partial) * include/bits/ranges_algo.h (ranges::__sample_fn): Qualify std::sample using macro to work in parallel mode. (__sort_fn): Likewise for std::sort. (ranges::__nth_element_fn): Likewise for std::nth_element. * include/bits/stl_algobase.h (lexicographical_compare_three_way): Likewise for std::__min_cmp. * include/parallel/algobase.h (lexicographical_compare_three_way): Add to namespace std::__parallel.
This commit is contained in:
parent
4cbc9d8b34
commit
9c24e97a97
@ -1,3 +1,25 @@
|
||||
2020-05-07 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/94971 (partial)
|
||||
* include/bits/ranges_algo.h (ranges::__sample_fn): Qualify
|
||||
std::sample using macro to work in parallel mode.
|
||||
(__sort_fn): Likewise for std::sort.
|
||||
(ranges::__nth_element_fn): Likewise for std::nth_element.
|
||||
* include/bits/stl_algobase.h (lexicographical_compare_three_way):
|
||||
Likewise for std::__min_cmp.
|
||||
* include/parallel/algobase.h (lexicographical_compare_three_way):
|
||||
Add to namespace std::__parallel.
|
||||
|
||||
PR c/92472
|
||||
* include/parallel/multiway_merge.h (_GuardedIterator::operator*)
|
||||
(_GuardedIterator::operator _RAIter, _UnguardedIterator::operator*)
|
||||
(_UnguardedIterator::operator _RAIter): Add const qualifier.
|
||||
(operator<(_GuardedIterator&, _GuardedIterator&)
|
||||
(operator<=(_GuardedIterator&, _GuardedIterator&)
|
||||
(operator<(_UnguardedIterator&, _UnguardedIterator&)
|
||||
(operator<=(_UnguardedIterator&, _UnguardedIterator&): Change
|
||||
parameters to const references.
|
||||
|
||||
2020-05-07 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* config/abi/post/sparc64-linux-gnu/baseline_symbols.txt: Update.
|
||||
@ -27,18 +49,6 @@
|
||||
* config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt:
|
||||
Likewise.
|
||||
|
||||
2020-05-07 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR c/92472
|
||||
* include/parallel/multiway_merge.h (_GuardedIterator::operator*)
|
||||
(_GuardedIterator::operator _RAIter, _UnguardedIterator::operator*)
|
||||
(_UnguardedIterator::operator _RAIter): Add const qualifier.
|
||||
(operator<(_GuardedIterator&, _GuardedIterator&)
|
||||
(operator<=(_GuardedIterator&, _GuardedIterator&)
|
||||
(operator<(_UnguardedIterator&, _UnguardedIterator&)
|
||||
(operator<=(_UnguardedIterator&, _UnguardedIterator&): Change
|
||||
parameters to const references.
|
||||
|
||||
2020-05-06 Martin Liska <mliska@suse.cz>
|
||||
|
||||
Revert:
|
||||
|
@ -1758,8 +1758,9 @@ namespace ranges
|
||||
// FIXME: Forwarding to std::sample here requires computing __lasti
|
||||
// which may take linear time.
|
||||
auto __lasti = ranges::next(__first, __last);
|
||||
return std::sample(std::move(__first), std::move(__lasti),
|
||||
std::move(__out), __n, std::forward<_Gen>(__g));
|
||||
return _GLIBCXX_STD_A::
|
||||
sample(std::move(__first), std::move(__lasti), std::move(__out),
|
||||
__n, std::forward<_Gen>(__g));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2018,8 +2019,8 @@ namespace ranges
|
||||
_Comp __comp = {}, _Proj __proj = {}) const
|
||||
{
|
||||
auto __lasti = ranges::next(__first, __last);
|
||||
std::sort(std::move(__first), __lasti,
|
||||
__detail::__make_comp_proj(__comp, __proj));
|
||||
_GLIBCXX_STD_A::sort(std::move(__first), __lasti,
|
||||
__detail::__make_comp_proj(__comp, __proj));
|
||||
return __lasti;
|
||||
}
|
||||
|
||||
@ -2262,8 +2263,9 @@ namespace ranges
|
||||
_Comp __comp = {}, _Proj __proj = {}) const
|
||||
{
|
||||
auto __lasti = ranges::next(__first, __last);
|
||||
std::nth_element(std::move(__first), std::move(__nth), __lasti,
|
||||
__detail::__make_comp_proj(__comp, __proj));
|
||||
_GLIBCXX_STD_A::nth_element(std::move(__first), std::move(__nth),
|
||||
__lasti,
|
||||
__detail::__make_comp_proj(__comp, __proj));
|
||||
return __lasti;
|
||||
}
|
||||
|
||||
|
@ -1706,8 +1706,8 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
|
||||
if constexpr (__is_byte_iter<_InputIter1>)
|
||||
if constexpr (__is_byte_iter<_InputIter2>)
|
||||
{
|
||||
const auto [__len, __lencmp]
|
||||
= std::__min_cmp(__last1 - __first1, __last2 - __first2);
|
||||
const auto [__len, __lencmp] = _GLIBCXX_STD_A::
|
||||
__min_cmp(__last1 - __first1, __last2 - __first2);
|
||||
if (__len)
|
||||
{
|
||||
const auto __c
|
||||
@ -1737,9 +1737,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
|
||||
_InputIter2 __first2,
|
||||
_InputIter2 __last2)
|
||||
{
|
||||
return std::lexicographical_compare_three_way(__first1, __last1,
|
||||
__first2, __last2,
|
||||
compare_three_way{});
|
||||
return _GLIBCXX_STD_A::
|
||||
lexicographical_compare_three_way(__first1, __last1, __first2, __last2,
|
||||
compare_three_way{});
|
||||
}
|
||||
#endif // three_way_comparison
|
||||
|
||||
|
@ -466,6 +466,10 @@ namespace __parallel
|
||||
__begin1, __end1, __begin2, __end2, __pred,
|
||||
_IteratorCategory1(), _IteratorCategory2());
|
||||
}
|
||||
|
||||
#if __cpp_lib_three_way_comparison
|
||||
using _GLIBCXX_STD_A::lexicographical_compare_three_way;
|
||||
#endif
|
||||
} // end namespace
|
||||
} // end namespace
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user