On Sun, 27 Sept 2026 at 15:09, Iain Sandoe <[email protected]> wrote:
>
> std/simd/arithmetic.cc fails everywhere on Darwin because libc there does
> not define __STDC_IEC_60559_COMPLEX__.  Fixed by using the compiler's
> indicator if libc does not emit one.  Tested on x86_64 linux/darwin,
> OK for trunk? thanks
> Iain
>
> --- 8< ---
>
> __STDC_IEC_60559_COMPLEX__ is not a compiler pre-define; it is provided
> by glibc but not necessarily by other libc implementations.
>
> However the compiler does support Annex G and emits __GCC_IEC_559_COMPLEX
> to indicate this (where the value is > 0).  Use the compiler's value where
> __STDC_IEC_60559_COMPLEX__ is absent.
>
> libstdc++-v3/ChangeLog:
>
>         * include/bits/simd_details.h: Use __GCC_IEC_559_COMPLEX to
>         determine IEC60559 complex support.
>
> Signed-off-by: Iain Sandoe <[email protected]>
> ---
>  libstdc++-v3/include/bits/simd_details.h | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/libstdc++-v3/include/bits/simd_details.h 
> b/libstdc++-v3/include/bits/simd_details.h
> index 46eab585eb9..29a7195c539 100644
> --- a/libstdc++-v3/include/bits/simd_details.h
> +++ b/libstdc++-v3/include/bits/simd_details.h
> @@ -532,8 +532,13 @@ namespace simd
>
>         // C Annex G defines the behavior of complex<T> where T is IEC60559 
> floating-point. If
>         // __STDC_IEC_60559_COMPLEX__ is defined then Annex G is implemented 
> - and simd<complex>
> -       // will do so as well. However, Clang never defines the macro.
> -#if defined __STDC_IEC_60559_COMPLEX__ || defined __STDC_IEC_559_COMPLEX__ 
> || defined _GLIBCXX_CLANG
> +       // will do so as well. However, __STDC_IEC_60559_COMPLEX__ is defined 
> (if at all)
> +       // by the C library and will typically be absent on non-glibc targets.
> +       // GCC nevertheless implements Annex G and std::complex relies on it; 
> the compiler
> +       // emits __GCC_IEC_559_COMPLEX with value > 0 where it is 
> enabled/valid.
> +       // Clang is flagged to support it unconditionally.
> +#if defined __STDC_IEC_60559_COMPLEX__ || defined __STDC_IEC_559_COMPLEX__ \
> +      || (defined __GCC_IEC_559_COMPLEX && __GCC_IEC_559_COMPLEX > 0) || 
> defined _GLIBCXX_CLANG

We don't generally care about -Wundef warnings because libstdc++ is
riddled with them, so the __GCC_IEC_559_COMPLEX > 0 part is enough,
without first testing if it's defined.

But it doesn't do any harm.

OK for trunk


>           + (1 << 10)
>  #endif
>  #if __SUPPORT_SNAN__
> --
> 2.50.1 (Apple Git-155)
>

Reply via email to