On Wed, 9 Sept 2026 at 20:53, Iain Sandoe <[email protected]> wrote: > > 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?
Looks OK to me, please give Matthias a chance to comment and commit if he doesn't respond :-) > 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) >
