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)

Reply via email to