On Thu, 10 Sept 2026, 08:11 Matthias Kretz, <[email protected]> wrote:
> Jonathan Wakely [Wednesday, 9 September 2026, 22:15:20 CEST]: > > 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 :-) > > I already gave my go ahead in PR126811. I thought I'd seen you ack it, but I looked in that PR and didn't see anything from you... but that's because that's the front end bug and your comment was on PR126807 of course - oops This implements what I intended the > behavior to be. > Cool, Iain can push it then > - Matthias > > > > > > 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) > > > -- > ────────────────────────────────────────────────────────────────────────── > Dr. Matthias Kretz https://mattkretz.github.io > GSI Helmholtz Center for Heavy Ion Research https://gsi.de > std::simd > ────────────────────────────────────────────────────────────────────────── > > > >
