[clang] Adding Separate OpenMP Offloading Backend to `libcxx/include/__algorithm/pstl_backends` (PR #66968)

Anton Rydahl via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 13 14:51:08 PDT 2023


================
@@ -0,0 +1,33 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___ALGORITHM_PSTL_BACKENDS_OPENMP_BACKEND_ANY_OF_H
+#define _LIBCPP___ALGORITHM_PSTL_BACKENDS_OPENMP_BACKEND_ANY_OF_H
+
+#include <__algorithm/any_of.h>
+#include <__algorithm/pstl_backends/cpu_backends/backend.h>
+#include <__algorithm/pstl_backends/openmp/backend.h>
+#include <__config>
+#include <__type_traits/is_execution_policy.h>
+
+#if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate>
+_LIBCPP_HIDE_FROM_ABI bool
+__pstl_any_of(__omp_backend_tag, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) {
----------------
AntonRydahl wrote:

Here is the full error for one of the tests that fail if I do not make a placeholder for any_of:
```
******************** TEST 'llvm-libc++-shared.cfg.in :: std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp' FAILED ********************
Exit Code: 1

Command Output (stdout):
--
# COMPILED WITH
/dev/shm/rydahl1/LLVM/build/./bin/clang++ /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp -pthread --target=x86_64-unknown-linux-gnu -nostdinc++ -I /dev/shm/rydahl1/LLVM/build/include/c++/v1 -I /dev/shm/rydahl1/LLVM/build/include/x86_64-unknown-linux-gnu/c++/v1 -I /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support -std=c++26 -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier -Wdeprecated-copy -Wdeprecated-copy-dtor -Wno-user-defined-literals -Wno-tautological-compare -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions -Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete -Wno-redundant-move -Wno-self-move -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_ENABLE_EXPERIMENTAL -Werror=thread-safety -Wuser-defined-warnings  -lc++experimental -nostdlib++ -L /dev/shm/rydahl1/LLVM/build/./lib/x86_64-unknown-linux-gnu -Wl,-rpath,/dev/shm/rydahl1/LLVM/build/./lib/x86_64-unknown-linux-gnu -lc++ -o /dev/shm/rydahl1/LLVM/build/runtimes/runtimes-bins/test/std/algorithms/alg.modifying.operations/alg.fill/Output/pstl.fill_n.pass.cpp.dir/t.tmp.exe
# executed command: /dev/shm/rydahl1/LLVM/build/./bin/clang++ /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp -pthread --target=x86_64-unknown-linux-gnu -nostdinc++ -I /dev/shm/rydahl1/LLVM/build/include/c++/v1 -I /dev/shm/rydahl1/LLVM/build/include/x86_64-unknown-linux-gnu/c++/v1 -I /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support -std=c++26 -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier -Wdeprecated-copy -Wdeprecated-copy-dtor -Wno-user-defined-literals -Wno-tautological-compare -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions -Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete -Wno-redundant-move -Wno-self-move -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_ENABLE_EXPERIMENTAL -Werror=thread-safety -Wuser-defined-warnings -lc++experimental -nostdlib++ -L /dev/shm/rydahl1/LLVM/build/./lib/x86_64-unknown-linux-gnu -Wl,-rpath,/dev/shm/rydahl1/LLVM/build/./lib/x86_64-unknown-linux-gnu -lc++ -o /dev/shm/rydahl1/LLVM/build/runtimes/runtimes-bins/test/std/algorithms/alg.modifying.operations/alg.fill/Output/pstl.fill_n.pass.cpp.dir/t.tmp.exe
# .---command stderr------------
# | In file included from /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:19:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/algorithm:1827:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_any_all_none_of.h:12:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_find.h:14:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_backend.h:12:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_backends/cpu_backend.h:58:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_backends/cpu_backends/any_of.h:14:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_backends/cpu_backends/backend.h:16:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_backends/cpu_backends/serial.h:17:
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:724:45: error: cannot form a reference to 'void'
# |   724 |           return is_constructible_v<_Tp, _Up&&> &&
# |       |                                             ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:827:47: note: in instantiation of function template specialization 'std::optional<std::__empty>::_CheckOptionalArgsConstructor::__enable_implicit<void>' requested here
# |   827 |         _CheckOptionalArgsCtor<_Up>::template __enable_implicit<_Up>()
# |       |                                               ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:830:15: note: while substituting prior template arguments into non-type template parameter [with _Up = decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))]
# |   830 |     constexpr optional(_Up&& __v)
# |       |               ^~~~~~~~~~~~~~~~~~~
# |   831 |         : __base(in_place, _VSTD::forward<_Up>(__v)) {}
# |       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:44:10: note: while substituting deduced template arguments into function template 'optional' [with _Up = decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args))), $1 = (no value)]
# |    44 |   return std::__pstl_frontend_dispatch(
# |       |          ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:64:13: note: in instantiation of function template specialization 'std::__fill<const std::execution::parallel_unsequenced_policy &, int *, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    64 |   if (!std::__fill(__policy, std::move(__first), std::move(__last), __value))
# |       |             ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:84:16: note: in instantiation of function template specialization 'std::fill<const std::execution::parallel_unsequenced_policy &, int *, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    84 |           std::fill(__policy, __g_first, __g_first + __g_n, __g_value);
# |       |                ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:103:13: note: in instantiation of function template specialization 'std::__fill_n<const std::execution::parallel_unsequenced_policy &, int *, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |   103 |   if (!std::__fill_n(__policy, std::move(__first), std::move(__n), __value))
# |       |             ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:38:12: note: in instantiation of function template specialization 'std::fill_n<const std::execution::parallel_unsequenced_policy &, int *, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    38 |       std::fill_n(policy, Iter(std::begin(a)), std::size(a), 33);
# |       |            ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:38:3: note: in instantiation of function template specialization 'Test<int *>::operator()<const std::execution::parallel_unsequenced_policy &>' requested here
# |    38 |   func(std::execution::par_unseq);
# |       |   ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:47:5: note: in instantiation of function template specialization 'test_execution_policies<Test<int *>>' requested here
# |    47 |     test_execution_policies(TestClass<Iter>{});
# |       |     ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/type_algorithms.h:52:23: note: in instantiation of function template specialization 'TestIteratorWithPolicies<Test>::operator()<int *>' requested here
# |    52 |   swallow((f.template operator()<Types>(), 0)...);
# |       |                       ^
# | In file included from /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:19:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/algorithm:1830:
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:44:10: error: no viable conversion from returned value of type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to function return type 'optional<__empty>'
# |    44 |   return std::__pstl_frontend_dispatch(
# |       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    45 |       _LIBCPP_PSTL_CUSTOMIZATION_POINT(__pstl_fill, _RawPolicy),
# |       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    46 |       [&](_ForwardIterator __g_first, _ForwardIterator __g_last, const _Tp& __g_value) {
# |       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    47 |         return std::__for_each(__policy, __g_first, __g_last, [&](__iter_reference<_ForwardIterator> __element) {
# |       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    48 |           __element = __g_value;
# |       |           ~~~~~~~~~~~~~~~~~~~~~~
# |    49 |         });
# |       |         ~~~
# |    50 |       },
# |       |       ~~
# |    51 |       std::move(__first),
# |       |       ~~~~~~~~~~~~~~~~~~~
# |    52 |       std::move(__last),
# |       |       ~~~~~~~~~~~~~~~~~~
# |    53 |       __value);
# |       |       ~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:64:13: note: in instantiation of function template specialization 'std::__fill<const std::execution::parallel_unsequenced_policy &, int *, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    64 |   if (!std::__fill(__policy, std::move(__first), std::move(__last), __value))
# |       |             ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:84:16: note: in instantiation of function template specialization 'std::fill<const std::execution::parallel_unsequenced_policy &, int *, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    84 |           std::fill(__policy, __g_first, __g_first + __g_n, __g_value);
# |       |                ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:103:13: note: in instantiation of function template specialization 'std::__fill_n<const std::execution::parallel_unsequenced_policy &, int *, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |   103 |   if (!std::__fill_n(__policy, std::move(__first), std::move(__n), __value))
# |       |             ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:38:12: note: in instantiation of function template specialization 'std::fill_n<const std::execution::parallel_unsequenced_policy &, int *, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    38 |       std::fill_n(policy, Iter(std::begin(a)), std::size(a), 33);
# |       |            ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:38:3: note: in instantiation of function template specialization 'Test<int *>::operator()<const std::execution::parallel_unsequenced_policy &>' requested here
# |    38 |   func(std::execution::par_unseq);
# |       |   ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:47:5: note: in instantiation of function template specialization 'test_execution_policies<Test<int *>>' requested here
# |    47 |     test_execution_policies(TestClass<Iter>{});
# |       |     ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/type_algorithms.h:52:23: note: in instantiation of function template specialization 'TestIteratorWithPolicies<Test>::operator()<int *>' requested here
# |    52 |   swallow((f.template operator()<Types>(), 0)...);
# |       |                       ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:804:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to 'const optional<__empty> &' for 1st argument
# |   804 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(const optional&) = default;
# |       |                                         ^        ~~~~~~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:805:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to 'optional<__empty> &&' for 1st argument
# |   805 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(optional&&) = default;
# |       |                                         ^        ~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:806:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to 'nullopt_t' for 1st argument
# |   806 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(nullopt_t) noexcept {}
# |       |                                         ^        ~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:830:15: note: candidate template ignored: substitution failure [with _Up = decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))]: non-type template argument is not a constant expression
# |   827 |         _CheckOptionalArgsCtor<_Up>::template __enable_implicit<_Up>()
# |       |         ~~~~~~~~~~~~~~~~~~~~~~
# |   828 |     , int> = 0>
# |   829 |     _LIBCPP_INLINE_VISIBILITY
# |   830 |     constexpr optional(_Up&& __v)
# |       |               ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:845:35: note: candidate template ignored: could not match 'optional<_Up>' against 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void')
# |   845 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(const optional<_Up>& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:863:35: note: candidate template ignored: could not match 'optional<_Up>' against 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void')
# |   863 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(optional<_Up>&& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:816:24: note: explicit constructor is not a candidate
# |   816 |     constexpr explicit optional(_InPlaceT, _Args&&... __args)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:837:24: note: explicit constructor is not a candidate
# |   837 |     constexpr explicit optional(_Up&& __v)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:853:44: note: explicit constructor is not a candidate
# |   853 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(const optional<_Up>& __v)
# |       |                                            ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:871:44: note: explicit constructor is not a candidate
# |   871 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(optional<_Up>&& __v)
# |       |                                            ^
# | In file included from /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:19:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/algorithm:1829:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_count.h:15:
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_for_each.h:43:10: error: no viable conversion from returned value of type 'void' to function return type 'optional<__empty>'
# |    43 |   return std::__pstl_for_each<_RawPolicy>(_Backend{}, std::move(__first), std::move(__last), std::move(__func));
# |       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:47:21: note: in instantiation of function template specialization 'std::__for_each<const std::execution::parallel_unsequenced_policy &, int *&, (lambda at /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:47:63), std::execution::parallel_unsequenced_policy, 0>' requested here
# |    47 |         return std::__for_each(__policy, __g_first, __g_last, [&](__iter_reference<_ForwardIterator> __element) {
# |       |                     ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:64:13: note: in instantiation of function template specialization 'std::__fill<const std::execution::parallel_unsequenced_policy &, int *, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    64 |   if (!std::__fill(__policy, std::move(__first), std::move(__last), __value))
# |       |             ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:84:16: note: in instantiation of function template specialization 'std::fill<const std::execution::parallel_unsequenced_policy &, int *, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    84 |           std::fill(__policy, __g_first, __g_first + __g_n, __g_value);
# |       |                ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:103:13: note: in instantiation of function template specialization 'std::__fill_n<const std::execution::parallel_unsequenced_policy &, int *, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |   103 |   if (!std::__fill_n(__policy, std::move(__first), std::move(__n), __value))
# |       |             ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:38:12: note: in instantiation of function template specialization 'std::fill_n<const std::execution::parallel_unsequenced_policy &, int *, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    38 |       std::fill_n(policy, Iter(std::begin(a)), std::size(a), 33);
# |       |            ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:38:3: note: in instantiation of function template specialization 'Test<int *>::operator()<const std::execution::parallel_unsequenced_policy &>' requested here
# |    38 |   func(std::execution::par_unseq);
# |       |   ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:47:5: note: in instantiation of function template specialization 'test_execution_policies<Test<int *>>' requested here
# |    47 |     test_execution_policies(TestClass<Iter>{});
# |       |     ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/type_algorithms.h:52:23: note: in instantiation of function template specialization 'TestIteratorWithPolicies<Test>::operator()<int *>' requested here
# |    52 |   swallow((f.template operator()<Types>(), 0)...);
# |       |                       ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:804:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'void' to 'const optional<__empty> &' for 1st argument
# |   804 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(const optional&) = default;
# |       |                                         ^        ~~~~~~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:805:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'void' to 'optional<__empty> &&' for 1st argument
# |   805 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(optional&&) = default;
# |       |                                         ^        ~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:806:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'void' to 'nullopt_t' for 1st argument
# |   806 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(nullopt_t) noexcept {}
# |       |                                         ^        ~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:830:15: note: candidate template ignored: substitution failure [with _Up = void]: no matching function for call to '__enable_implicit'
# |   827 |         _CheckOptionalArgsCtor<_Up>::template __enable_implicit<_Up>()
# |       |         ~~~~~~~~~~~~~~~~~~~~~~
# |   828 |     , int> = 0>
# |   829 |     _LIBCPP_INLINE_VISIBILITY
# |   830 |     constexpr optional(_Up&& __v)
# |       |               ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:845:35: note: candidate template ignored: could not match 'optional<_Up>' against 'void'
# |   845 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(const optional<_Up>& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:863:35: note: candidate template ignored: could not match 'optional<_Up>' against 'void'
# |   863 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(optional<_Up>&& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:816:24: note: explicit constructor is not a candidate
# |   816 |     constexpr explicit optional(_InPlaceT, _Args&&... __args)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:837:24: note: explicit constructor is not a candidate
# |   837 |     constexpr explicit optional(_Up&& __v)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:853:44: note: explicit constructor is not a candidate
# |   853 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(const optional<_Up>& __v)
# |       |                                            ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:871:44: note: explicit constructor is not a candidate
# |   871 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(optional<_Up>&& __v)
# |       |                                            ^
# | In file included from /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:19:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/algorithm:1830:
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:44:10: error: no viable conversion from returned value of type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to function return type 'optional<__empty>'
# |    44 |   return std::__pstl_frontend_dispatch(
# |       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    45 |       _LIBCPP_PSTL_CUSTOMIZATION_POINT(__pstl_fill, _RawPolicy),
# |       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    46 |       [&](_ForwardIterator __g_first, _ForwardIterator __g_last, const _Tp& __g_value) {
# |       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    47 |         return std::__for_each(__policy, __g_first, __g_last, [&](__iter_reference<_ForwardIterator> __element) {
# |       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    48 |           __element = __g_value;
# |       |           ~~~~~~~~~~~~~~~~~~~~~~
# |    49 |         });
# |       |         ~~~
# |    50 |       },
# |       |       ~~
# |    51 |       std::move(__first),
# |       |       ~~~~~~~~~~~~~~~~~~~
# |    52 |       std::move(__last),
# |       |       ~~~~~~~~~~~~~~~~~~
# |    53 |       __value);
# |       |       ~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:64:13: note: in instantiation of function template specialization 'std::__fill<const std::execution::parallel_unsequenced_policy &, contiguous_iterator<int *>, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    64 |   if (!std::__fill(__policy, std::move(__first), std::move(__last), __value))
# |       |             ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:84:16: note: in instantiation of function template specialization 'std::fill<const std::execution::parallel_unsequenced_policy &, contiguous_iterator<int *>, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    84 |           std::fill(__policy, __g_first, __g_first + __g_n, __g_value);
# |       |                ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:103:13: note: in instantiation of function template specialization 'std::__fill_n<const std::execution::parallel_unsequenced_policy &, contiguous_iterator<int *>, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |   103 |   if (!std::__fill_n(__policy, std::move(__first), std::move(__n), __value))
# |       |             ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:38:12: note: in instantiation of function template specialization 'std::fill_n<const std::execution::parallel_unsequenced_policy &, contiguous_iterator<int *>, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    38 |       std::fill_n(policy, Iter(std::begin(a)), std::size(a), 33);
# |       |            ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:38:3: note: in instantiation of function template specialization 'Test<contiguous_iterator<int *>>::operator()<const std::execution::parallel_unsequenced_policy &>' requested here
# |    38 |   func(std::execution::par_unseq);
# |       |   ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:47:5: note: in instantiation of function template specialization 'test_execution_policies<Test<contiguous_iterator<int *>>>' requested here
# |    47 |     test_execution_policies(TestClass<Iter>{});
# |       |     ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/type_algorithms.h:52:23: note: in instantiation of function template specialization 'TestIteratorWithPolicies<Test>::operator()<contiguous_iterator<int *>>' requested here
# |    52 |   swallow((f.template operator()<Types>(), 0)...);
# |       |                       ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:804:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to 'const optional<__empty> &' for 1st argument
# |   804 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(const optional&) = default;
# |       |                                         ^        ~~~~~~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:805:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to 'optional<__empty> &&' for 1st argument
# |   805 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(optional&&) = default;
# |       |                                         ^        ~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:806:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to 'nullopt_t' for 1st argument
# |   806 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(nullopt_t) noexcept {}
# |       |                                         ^        ~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:830:15: note: candidate template ignored: substitution failure [with _Up = decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))]: no matching function for call to '__enable_implicit'
# |   827 |         _CheckOptionalArgsCtor<_Up>::template __enable_implicit<_Up>()
# |       |         ~~~~~~~~~~~~~~~~~~~~~~
# |   828 |     , int> = 0>
# |   829 |     _LIBCPP_INLINE_VISIBILITY
# |   830 |     constexpr optional(_Up&& __v)
# |       |               ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:845:35: note: candidate template ignored: could not match 'optional<_Up>' against 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void')
# |   845 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(const optional<_Up>& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:863:35: note: candidate template ignored: could not match 'optional<_Up>' against 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void')
# |   863 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(optional<_Up>&& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:816:24: note: explicit constructor is not a candidate
# |   816 |     constexpr explicit optional(_InPlaceT, _Args&&... __args)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:837:24: note: explicit constructor is not a candidate
# |   837 |     constexpr explicit optional(_Up&& __v)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:853:44: note: explicit constructor is not a candidate
# |   853 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(const optional<_Up>& __v)
# |       |                                            ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:871:44: note: explicit constructor is not a candidate
# |   871 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(optional<_Up>&& __v)
# |       |                                            ^
# | In file included from /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:19:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/algorithm:1829:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_count.h:15:
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_for_each.h:43:10: error: no viable conversion from returned value of type 'void' to function return type 'optional<__empty>'
# |    43 |   return std::__pstl_for_each<_RawPolicy>(_Backend{}, std::move(__first), std::move(__last), std::move(__func));
# |       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:47:21: note: in instantiation of function template specialization 'std::__for_each<const std::execution::parallel_unsequenced_policy &, contiguous_iterator<int *> &, (lambda at /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:47:63), std::execution::parallel_unsequenced_policy, 0>' requested here
# |    47 |         return std::__for_each(__policy, __g_first, __g_last, [&](__iter_reference<_ForwardIterator> __element) {
# |       |                     ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:64:13: note: in instantiation of function template specialization 'std::__fill<const std::execution::parallel_unsequenced_policy &, contiguous_iterator<int *>, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    64 |   if (!std::__fill(__policy, std::move(__first), std::move(__last), __value))
# |       |             ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:84:16: note: in instantiation of function template specialization 'std::fill<const std::execution::parallel_unsequenced_policy &, contiguous_iterator<int *>, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    84 |           std::fill(__policy, __g_first, __g_first + __g_n, __g_value);
# |       |                ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:103:13: note: in instantiation of function template specialization 'std::__fill_n<const std::execution::parallel_unsequenced_policy &, contiguous_iterator<int *>, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |   103 |   if (!std::__fill_n(__policy, std::move(__first), std::move(__n), __value))
# |       |             ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:38:12: note: in instantiation of function template specialization 'std::fill_n<const std::execution::parallel_unsequenced_policy &, contiguous_iterator<int *>, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    38 |       std::fill_n(policy, Iter(std::begin(a)), std::size(a), 33);
# |       |            ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:38:3: note: in instantiation of function template specialization 'Test<contiguous_iterator<int *>>::operator()<const std::execution::parallel_unsequenced_policy &>' requested here
# |    38 |   func(std::execution::par_unseq);
# |       |   ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:47:5: note: in instantiation of function template specialization 'test_execution_policies<Test<contiguous_iterator<int *>>>' requested here
# |    47 |     test_execution_policies(TestClass<Iter>{});
# |       |     ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/type_algorithms.h:52:23: note: in instantiation of function template specialization 'TestIteratorWithPolicies<Test>::operator()<contiguous_iterator<int *>>' requested here
# |    52 |   swallow((f.template operator()<Types>(), 0)...);
# |       |                       ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:804:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'void' to 'const optional<__empty> &' for 1st argument
# |   804 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(const optional&) = default;
# |       |                                         ^        ~~~~~~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:805:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'void' to 'optional<__empty> &&' for 1st argument
# |   805 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(optional&&) = default;
# |       |                                         ^        ~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:806:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'void' to 'nullopt_t' for 1st argument
# |   806 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(nullopt_t) noexcept {}
# |       |                                         ^        ~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:830:15: note: candidate template ignored: substitution failure [with _Up = void]: no matching function for call to '__enable_implicit'
# |   827 |         _CheckOptionalArgsCtor<_Up>::template __enable_implicit<_Up>()
# |       |         ~~~~~~~~~~~~~~~~~~~~~~
# |   828 |     , int> = 0>
# |   829 |     _LIBCPP_INLINE_VISIBILITY
# |   830 |     constexpr optional(_Up&& __v)
# |       |               ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:845:35: note: candidate template ignored: could not match 'optional<_Up>' against 'void'
# |   845 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(const optional<_Up>& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:863:35: note: candidate template ignored: could not match 'optional<_Up>' against 'void'
# |   863 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(optional<_Up>&& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:816:24: note: explicit constructor is not a candidate
# |   816 |     constexpr explicit optional(_InPlaceT, _Args&&... __args)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:837:24: note: explicit constructor is not a candidate
# |   837 |     constexpr explicit optional(_Up&& __v)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:853:44: note: explicit constructor is not a candidate
# |   853 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(const optional<_Up>& __v)
# |       |                                            ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:871:44: note: explicit constructor is not a candidate
# |   871 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(optional<_Up>&& __v)
# |       |                                            ^
# | In file included from /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:19:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/algorithm:1830:
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:44:10: error: no viable conversion from returned value of type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to function return type 'optional<__empty>'
# |    44 |   return std::__pstl_frontend_dispatch(
# |       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    45 |       _LIBCPP_PSTL_CUSTOMIZATION_POINT(__pstl_fill, _RawPolicy),
# |       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    46 |       [&](_ForwardIterator __g_first, _ForwardIterator __g_last, const _Tp& __g_value) {
# |       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    47 |         return std::__for_each(__policy, __g_first, __g_last, [&](__iter_reference<_ForwardIterator> __element) {
# |       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |    48 |           __element = __g_value;
# |       |           ~~~~~~~~~~~~~~~~~~~~~~
# |    49 |         });
# |       |         ~~~
# |    50 |       },
# |       |       ~~
# |    51 |       std::move(__first),
# |       |       ~~~~~~~~~~~~~~~~~~~
# |    52 |       std::move(__last),
# |       |       ~~~~~~~~~~~~~~~~~~
# |    53 |       __value);
# |       |       ~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:64:13: note: in instantiation of function template specialization 'std::__fill<const std::execution::parallel_unsequenced_policy &, random_access_iterator<int *>, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    64 |   if (!std::__fill(__policy, std::move(__first), std::move(__last), __value))
# |       |             ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:84:16: note: in instantiation of function template specialization 'std::fill<const std::execution::parallel_unsequenced_policy &, random_access_iterator<int *>, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    84 |           std::fill(__policy, __g_first, __g_first + __g_n, __g_value);
# |       |                ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:103:13: note: in instantiation of function template specialization 'std::__fill_n<const std::execution::parallel_unsequenced_policy &, random_access_iterator<int *>, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |   103 |   if (!std::__fill_n(__policy, std::move(__first), std::move(__n), __value))
# |       |             ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:38:12: note: in instantiation of function template specialization 'std::fill_n<const std::execution::parallel_unsequenced_policy &, random_access_iterator<int *>, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    38 |       std::fill_n(policy, Iter(std::begin(a)), std::size(a), 33);
# |       |            ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:38:3: note: in instantiation of function template specialization 'Test<random_access_iterator<int *>>::operator()<const std::execution::parallel_unsequenced_policy &>' requested here
# |    38 |   func(std::execution::par_unseq);
# |       |   ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:47:5: note: in instantiation of function template specialization 'test_execution_policies<Test<random_access_iterator<int *>>>' requested here
# |    47 |     test_execution_policies(TestClass<Iter>{});
# |       |     ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/type_algorithms.h:52:23: note: in instantiation of function template specialization 'TestIteratorWithPolicies<Test>::operator()<random_access_iterator<int *>>' requested here
# |    52 |   swallow((f.template operator()<Types>(), 0)...);
# |       |                       ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:804:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to 'const optional<__empty> &' for 1st argument
# |   804 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(const optional&) = default;
# |       |                                         ^        ~~~~~~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:805:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to 'optional<__empty> &&' for 1st argument
# |   805 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(optional&&) = default;
# |       |                                         ^        ~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:806:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void') to 'nullopt_t' for 1st argument
# |   806 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(nullopt_t) noexcept {}
# |       |                                         ^        ~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:830:15: note: candidate template ignored: substitution failure [with _Up = decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))]: no matching function for call to '__enable_implicit'
# |   827 |         _CheckOptionalArgsCtor<_Up>::template __enable_implicit<_Up>()
# |       |         ~~~~~~~~~~~~~~~~~~~~~~
# |   828 |     , int> = 0>
# |   829 |     _LIBCPP_INLINE_VISIBILITY
# |   830 |     constexpr optional(_Up&& __v)
# |       |               ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:845:35: note: candidate template ignored: could not match 'optional<_Up>' against 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void')
# |   845 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(const optional<_Up>& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:863:35: note: candidate template ignored: could not match 'optional<_Up>' against 'decltype(std::__pstl_fill<std::execution::parallel_unsequenced_policy>(typename __select_backend<parallel_unsequenced_policy>::type{}, std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args), std::forward<decltype(__args)>(__args)))' (aka 'void')
# |   863 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(optional<_Up>&& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:816:24: note: explicit constructor is not a candidate
# |   816 |     constexpr explicit optional(_InPlaceT, _Args&&... __args)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:837:24: note: explicit constructor is not a candidate
# |   837 |     constexpr explicit optional(_Up&& __v)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:853:44: note: explicit constructor is not a candidate
# |   853 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(const optional<_Up>& __v)
# |       |                                            ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:871:44: note: explicit constructor is not a candidate
# |   871 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(optional<_Up>&& __v)
# |       |                                            ^
# | In file included from /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:19:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/algorithm:1829:
# | In file included from /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_count.h:15:
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_for_each.h:43:10: error: no viable conversion from returned value of type 'void' to function return type 'optional<__empty>'
# |    43 |   return std::__pstl_for_each<_RawPolicy>(_Backend{}, std::move(__first), std::move(__last), std::move(__func));
# |       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:47:21: note: in instantiation of function template specialization 'std::__for_each<const std::execution::parallel_unsequenced_policy &, random_access_iterator<int *> &, (lambda at /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:47:63), std::execution::parallel_unsequenced_policy, 0>' requested here
# |    47 |         return std::__for_each(__policy, __g_first, __g_last, [&](__iter_reference<_ForwardIterator> __element) {
# |       |                     ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:64:13: note: in instantiation of function template specialization 'std::__fill<const std::execution::parallel_unsequenced_policy &, random_access_iterator<int *>, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    64 |   if (!std::__fill(__policy, std::move(__first), std::move(__last), __value))
# |       |             ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:84:16: note: in instantiation of function template specialization 'std::fill<const std::execution::parallel_unsequenced_policy &, random_access_iterator<int *>, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    84 |           std::fill(__policy, __g_first, __g_first + __g_n, __g_value);
# |       |                ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/__algorithm/pstl_fill.h:103:13: note: in instantiation of function template specialization 'std::__fill_n<const std::execution::parallel_unsequenced_policy &, random_access_iterator<int *>, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |   103 |   if (!std::__fill_n(__policy, std::move(__first), std::move(__n), __value))
# |       |             ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/pstl.fill_n.pass.cpp:38:12: note: in instantiation of function template specialization 'std::fill_n<const std::execution::parallel_unsequenced_policy &, random_access_iterator<int *>, unsigned long, int, std::execution::parallel_unsequenced_policy, 0>' requested here
# |    38 |       std::fill_n(policy, Iter(std::begin(a)), std::size(a), 33);
# |       |            ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:38:3: note: in instantiation of function template specialization 'Test<random_access_iterator<int *>>::operator()<const std::execution::parallel_unsequenced_policy &>' requested here
# |    38 |   func(std::execution::par_unseq);
# |       |   ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/test_execution_policies.h:47:5: note: in instantiation of function template specialization 'test_execution_policies<Test<random_access_iterator<int *>>>' requested here
# |    47 |     test_execution_policies(TestClass<Iter>{});
# |       |     ^
# | /g/g92/rydahl1/LLVM_FORK/llvm-project/libcxx/test/support/type_algorithms.h:52:23: note: in instantiation of function template specialization 'TestIteratorWithPolicies<Test>::operator()<random_access_iterator<int *>>' requested here
# |    52 |   swallow((f.template operator()<Types>(), 0)...);
# |       |                       ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:804:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'void' to 'const optional<__empty> &' for 1st argument
# |   804 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(const optional&) = default;
# |       |                                         ^        ~~~~~~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:805:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'void' to 'optional<__empty> &&' for 1st argument
# |   805 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(optional&&) = default;
# |       |                                         ^        ~~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:806:41: note: candidate constructor not viable: cannot convert argument of incomplete type 'void' to 'nullopt_t' for 1st argument
# |   806 |     _LIBCPP_INLINE_VISIBILITY constexpr optional(nullopt_t) noexcept {}
# |       |                                         ^        ~~~~~~~~~
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:830:15: note: candidate template ignored: substitution failure [with _Up = void]: no matching function for call to '__enable_implicit'
# |   827 |         _CheckOptionalArgsCtor<_Up>::template __enable_implicit<_Up>()
# |       |         ~~~~~~~~~~~~~~~~~~~~~~
# |   828 |     , int> = 0>
# |   829 |     _LIBCPP_INLINE_VISIBILITY
# |   830 |     constexpr optional(_Up&& __v)
# |       |               ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:845:35: note: candidate template ignored: could not match 'optional<_Up>' against 'void'
# |   845 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(const optional<_Up>& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:863:35: note: candidate template ignored: could not match 'optional<_Up>' against 'void'
# |   863 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 optional(optional<_Up>&& __v)
# |       |                                   ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:816:24: note: explicit constructor is not a candidate
# |   816 |     constexpr explicit optional(_InPlaceT, _Args&&... __args)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:837:24: note: explicit constructor is not a candidate
# |   837 |     constexpr explicit optional(_Up&& __v)
# |       |                        ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:853:44: note: explicit constructor is not a candidate
# |   853 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(const optional<_Up>& __v)
# |       |                                            ^
# | /dev/shm/rydahl1/LLVM/build/include/c++/v1/optional:871:44: note: explicit constructor is not a candidate
# |   871 |     _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit optional(optional<_Up>&& __v)
# |       |                                            ^
# | 7 errors generated.
# `-----------------------------
# error: command failed with exit status: 1

--

********************
```

https://github.com/llvm/llvm-project/pull/66968


More information about the cfe-commits mailing list