about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--NEWS7
-rw-r--r--include/features.h21
-rw-r--r--manual/creature.texi7
4 files changed, 42 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 5b1ab7f40a..9263294b07 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2019-08-13  Joseph Myers  <joseph@codesourcery.com>
+
+	* include/features.h (_ISOC2X_SOURCE): New feature test macro.
+	Undefine and define to 1 if [_GNU_SOURCE].
+	(__GLIBC_USE_ISOC2X): New macro.  Undefine and redefine depending
+	on [_ISOC2X_SOURCE] and [__STDC_VERSION__ > 201710L].
+	(__USE_ISOC11): Also define to 1 if [_ISOC2X_SOURCE].
+	(__USE_ISOC99): Likewise.
+	(__USE_ISOC95): Likewise.
+	* manual/creature.texi (_ISOC2X_SOURCE): Document.
+
 2019-08-13  Florian Weimer  <fweimer@redhat.com>
 
 	* login/getutid_r.c (__getutid_r): _HAVE_UT_ID and _HAVE_UT_TYPE
diff --git a/NEWS b/NEWS
index 4326997ddd..8ca7585c2c 100644
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,12 @@ Version 2.31
 
 Major new features:
 
-  [Add new features here]
+* The GNU C Library now supports a feature test macro _ISOC2X_SOURCE to
+  enable features from the draft ISO C2X standard.  Only some features from
+  this draft standard are supported by the GNU C Library, and as the draft
+  is under active development, the set of features enabled by this macro is
+  liable to change.  Features from C2X are also enabled by _GNU_SOURCE, or
+  by compiling with "gcc -std=gnu2x".
 
 Deprecated and removed features, and other changes affecting compatibility:
 
diff --git a/include/features.h b/include/features.h
index bf47d881dd..8187539581 100644
--- a/include/features.h
+++ b/include/features.h
@@ -24,6 +24,7 @@
    __STRICT_ANSI__	ISO Standard C.
    _ISOC99_SOURCE	Extensions to ISO C89 from ISO C99.
    _ISOC11_SOURCE	Extensions to ISO C99 from ISO C11.
+   _ISOC2X_SOURCE	Extensions to ISO C99 from ISO C2X.
    __STDC_WANT_LIB_EXT2__
 			Extensions to ISO C99 from TR 27431-2:2010.
    __STDC_WANT_IEC_60559_BFP_EXT__
@@ -139,6 +140,7 @@
 #undef	__USE_GNU
 #undef	__USE_FORTIFY_LEVEL
 #undef	__KERNEL_STRICT_NAMES
+#undef	__GLIBC_USE_ISOC2X
 #undef	__GLIBC_USE_DEPRECATED_GETS
 #undef	__GLIBC_USE_DEPRECATED_SCANF
 
@@ -195,6 +197,8 @@
 # define _ISOC99_SOURCE	1
 # undef  _ISOC11_SOURCE
 # define _ISOC11_SOURCE	1
+# undef  _ISOC2X_SOURCE
+# define _ISOC2X_SOURCE	1
 # undef  _POSIX_SOURCE
 # define _POSIX_SOURCE	1
 # undef  _POSIX_C_SOURCE
@@ -216,26 +220,37 @@
 #if (defined _DEFAULT_SOURCE					\
      || (!defined __STRICT_ANSI__				\
 	 && !defined _ISOC99_SOURCE && !defined _ISOC11_SOURCE	\
+	 && !defined _ISOC2X_SOURCE				\
 	 && !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE	\
 	 && !defined _XOPEN_SOURCE))
 # undef  _DEFAULT_SOURCE
 # define _DEFAULT_SOURCE	1
 #endif
 
+/* This is to enable the ISO C2X extension.  */
+#if (defined _ISOC2X_SOURCE \
+     || (defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L))
+# define __GLIBC_USE_ISOC2X	1
+#else
+# define __GLIBC_USE_ISOC2X	0
+#endif
+
 /* This is to enable the ISO C11 extension.  */
-#if (defined _ISOC11_SOURCE \
+#if (defined _ISOC11_SOURCE || defined _ISOC2X_SOURCE \
      || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L))
 # define __USE_ISOC11	1
 #endif
 
 /* This is to enable the ISO C99 extension.  */
-#if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE \
+#if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE			\
+     || defined _ISOC2X_SOURCE						\
      || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
 # define __USE_ISOC99	1
 #endif
 
 /* This is to enable the ISO C90 Amendment 1:1995 extension.  */
-#if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE \
+#if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE			\
+     || defined _ISOC2X_SOURCE						\
      || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199409L))
 # define __USE_ISOC95	1
 #endif
diff --git a/manual/creature.texi b/manual/creature.texi
index 8876b2ab77..be5050468b 100644
--- a/manual/creature.texi
+++ b/manual/creature.texi
@@ -177,6 +177,13 @@ when the compiler uses an earlier language version.
 If this macro is defined, ISO C11 extensions to ISO C99 are included.
 @end defvr
 
+@defvr Macro _ISOC2X_SOURCE
+@standards{C2X, (none)}
+If this macro is defined, ISO C2X extensions to ISO C11 are included.
+Only some features from this draft standard are supported by
+@theglibc{}.
+@end defvr
+
 @defvr Macro __STDC_WANT_LIB_EXT2__
 @standards{ISO, (none)}
 If you define this macro to the value @code{1}, features from ISO/IEC