Tested on x86_64, aarch64-linux and on x86_64-darwin.
At present (on Darwin), fixing this issue exposes PR126811 (but that's a C++
FE change to fix and not included here). OK for trunk?
thanks
Iain
--- 8< ---
14 simd testcases fail to build on Darwin because math_errhandling is a macro
that resolves to a function, rather than a constant. At present the macro
is present in a non-dependent requires clause and so is not substituted. We
need this to SFINAE in the immediate context.
Solution proposed here is to use the macro as a default template argument
instead.
PR libstdc++/126807
libstdc++-v3/ChangeLog:
* include/bits/simd_details.h: Make the math_errhandling
macro into a default template argument.
Signed-off-by: Iain Sandoe <[email protected]>
---
libstdc++-v3/include/bits/simd_details.h | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/libstdc++-v3/include/bits/simd_details.h
b/libstdc++-v3/include/bits/simd_details.h
index a3ec38f0dc0..46eab585eb9 100644
--- a/libstdc++-v3/include/bits/simd_details.h
+++ b/libstdc++-v3/include/bits/simd_details.h
@@ -422,12 +422,14 @@ namespace simd
// math_errhandling may expand to an extern symbol, in which case we must
assume fp exceptions
// need to be considered. A conforming C library must define
math_errhandling, but in case it
// isn't defined we simply use the fallback.
+ // The macro is used as default template argument (rather than in a
requires-clause) so that a
+ // non-constant math_errhandling is a substitution failure in the immediate
context instead of a
+ // hard error at the point of definition.
#ifdef math_errhandling
- template <int = 0>
- requires requires { typename bool_constant<0 != (math_errhandling &
MATH_ERREXCEPT)>; }
+ template <int _ErrHandling = math_errhandling>
consteval bool
__handle_fpexcept_impl(int)
- { return 0 != (math_errhandling & MATH_ERREXCEPT); }
+ { return 0 != (_ErrHandling & MATH_ERREXCEPT); }
#endif
// Fallback if math_errhandling doesn't work: implement correct exception
behavior.
--
2.50.1 (Apple Git-155)