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
+ (1 << 10)
#endif
#if __SUPPORT_SNAN__
--
2.50.1 (Apple Git-155)