diff mbox

[4/8] Add support for testing __STDC_WANT_IEC_60559_TYPES_EXT__

Message ID 1478716859-3246-5-git-send-email-gftg@linux.vnet.ibm.com
State New
Headers show

Commit Message

Gabriel F. T. Gomes Nov. 9, 2016, 6:40 p.m. UTC
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

Joseph Myers Nov. 9, 2016, 9:42 p.m. UTC | #1
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.
diff mbox

Patch

diff --git a/bits/libc-header-start.h b/bits/libc-header-start.h
index ee6a876..251ff05 100644
--- a/bits/libc-header-start.h
+++ b/bits/libc-header-start.h
@@ -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