[4/8] Add support for testing __STDC_WANT_IEC_60559_TYPES_EXT__
Commit Message
From: "Paul E. Murphy" <murphyp@linux.vnet.ibm.com>
This is defined by TS 18661-3 for supporting the _FloatN
and _FloatNx types.
This will also implicitly enforce a minimum GCC 4.9. Given
the standard is a C11 derivative, it would seem reasonable
to assume a C11 compiler with _Generic support. This allows
for much simpler type classification macros which in theory
should be supported on any C11 compiler.
* bits/libc-header-start.h:
(__GLIBC_USR_IEC_60559_TYPES_EXT): New macro.
---
bits/libc-header-start.h | 15 +++++++++++++++
1 file changed, 15 insertions(+)
Comments
On Wed, 9 Nov 2016, Gabriel F. T. Gomes wrote:
> This will also implicitly enforce a minimum GCC 4.9. Given
> the standard is a C11 derivative, it would seem reasonable
> to assume a C11 compiler with _Generic support. This allows
> for much simpler type classification macros which in theory
> should be supported on any C11 compiler.
I don't think that's appropriate. The aim should be to minimize the
number of conditionals (on versions, supported types, etc.) in the
individual headers with type-generic macros, at the expense of more
complexity somewhere defining infrastructure for such macros.
Also, __USE_ISOC11 relates purely to library facilities. It says nothing
about availability of language support.
@@ -59,3 +59,18 @@
#else
# define __GLIBC_USE_IEC_60559_FUNCS_EXT 0
#endif
+
+/* ISO/IEC TS 18661-3:2014 defines the
+ __STDC_WANT_IEC_60559_TYPES_EXT__ macro.
+
+ Note, as a tradeoff for keeping the headers simple, this will
+ require C11 Generic support. Thus, GCC 4.9 is mandated when
+ requesting this support and using GCC. */
+#undef __GLIBC_USE_IEC_60559_TYPES_EXT
+#if (defined __STDC_WANT_IEC_60559_TYPES_EXT__ || defined __USE_GNU) \
+ && defined __USE_ISOC11 \
+ && ((defined __GNUC__ && __GNUC_PREREQ (4, 9)) || !defined __GNUC__)
+# define __GLIBC_USE_IEC_60559_TYPES_EXT 1
+#else
+# define __GLIBC_USE_IEC_60559_TYPES_EXT 0
+#endif