Add -std=c18 etc. option aliases

Joseph Myers joseph@codesourcery.com
Thu Nov 16 23:10:00 GMT 2017


ISO C17 won't go to ballot until December, meaning publication of the
standard won't be until 2018, leaving ambiguity as to whether people
will end up referring to the standard as C17, as it's currently known
and which corresponds to the __STDC_VERSION__ value, or C18 based on
the publication date.

In case people end up referring to this standard as C18, this patch
adds corresponding option aliases -std=c18, -std=iso9899:2018,
-std=gnu18 so people can use those names based on publication date if
they wish.  The "expected to be" explanations in help texts and the
manual can be removed as and when the standard is published, hopefully
before GCC 8 is out.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.  Applied to 
mainline.

gcc:
2017-11-16  Joseph Myers  <joseph@codesourcery.com>

	* doc/invoke.texi (-std=c17): Refer to 2018 expected publication
	date of C17.
	(-std=c18, -std=iso9899:2018, -std=gnu18): Document option
	aliases.

gcc/c-family:
2017-11-16  Joseph Myers  <joseph@codesourcery.com>

	* c.opt (-std=c17, std=gnu17, -std=iso9899:2017): Refer to 2018
	expected publication date of C17.
	(-std=c18, -std=gnu18, -std=iso9899:2018): New option aliases.

gcc/testsuite:
2017-11-16  Joseph Myers  <joseph@codesourcery.com>

	* gcc.dg/c18-version-1.c, gcc.dg/c18-version-2.c: New tests.

Index: gcc/c-family/c.opt
===================================================================
--- gcc/c-family/c.opt	(revision 254837)
+++ gcc/c-family/c.opt	(working copy)
@@ -1950,8 +1950,12 @@
 
 std=c17
 C ObjC
-Conform to the ISO 2017 C standard.
+Conform to the ISO 2017 C standard (expected to be published in 2018).
 
+std=c18
+C ObjC Alias(std=c17)
+Conform to the ISO 2017 C standard (expected to be published in 2018).
+
 std=c89
 C ObjC Alias(std=c90)
 Conform to the ISO 1990 C standard.
@@ -2016,8 +2020,12 @@
 
 std=gnu17
 C ObjC
-Conform to the ISO 2017 C standard with GNU extensions.
+Conform to the ISO 2017 C standard (expected to be published in 2018) with GNU extensions.
 
+std=gnu18
+C ObjC Alias(std=gnu17)
+Conform to the ISO 2017 C standard (expected to be published in 2018) with GNU extensions.
+
 std=gnu89
 C ObjC Alias(std=gnu90)
 Conform to the ISO 1990 C standard with GNU extensions.
@@ -2056,8 +2064,12 @@
 
 std=iso9899:2017
 C ObjC Alias(std=c17)
-Conform to the ISO 2017 C standard.
+Conform to the ISO 2017 C standard (expected to be published in 2018).
 
+std=iso9899:2018
+C ObjC Alias(std=c17)
+Conform to the ISO 2017 C standard (expected to be published in 2018).
+
 traditional
 Driver
 
Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi	(revision 254837)
+++ gcc/doc/invoke.texi	(working copy)
@@ -1832,8 +1832,11 @@
 interfaces) and L (Analyzability).  The name @samp{c1x} is deprecated.
 
 @item c17
+@itemx c18
 @itemx iso9899:2017
-ISO C17, the 2017 revision of the ISO C standard.  This standard is
+@itemx iso9899:2018
+ISO C17, the 2017 revision of the ISO C standard (expected to be
+published in 2018).  This standard is
 same as C11 except for corrections of defects (all of which are also
 applied with @option{-std=c11}) and a new value of
 @code{__STDC_VERSION__}, and so is supported to the same extent as C11.
@@ -1852,6 +1855,7 @@
 The name @samp{gnu1x} is deprecated.
 
 @item gnu17
+@itemx gnu18
 GNU dialect of ISO C17.  This is the default for C code.
 
 @item c++98
Index: gcc/testsuite/gcc.dg/c18-version-1.c
===================================================================
--- gcc/testsuite/gcc.dg/c18-version-1.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/c18-version-1.c	(working copy)
@@ -0,0 +1,9 @@
+/* Test __STDC_VERSION__ for C17.  Test -std=c18.  */
+/* { dg-do compile } */
+/* { dg-options "-std=c18 -pedantic-errors" } */
+
+#if __STDC_VERSION__ == 201710L
+int i;
+#else
+#error "Bad __STDC_VERSION__."
+#endif
Index: gcc/testsuite/gcc.dg/c18-version-2.c
===================================================================
--- gcc/testsuite/gcc.dg/c18-version-2.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/c18-version-2.c	(working copy)
@@ -0,0 +1,9 @@
+/* Test __STDC_VERSION__ for C17.  Test -std=iso9899:2018.  */
+/* { dg-do compile } */
+/* { dg-options "-std=iso9899:2018 -pedantic-errors" } */
+
+#if __STDC_VERSION__ == 201710L
+int i;
+#else
+#error "Bad __STDC_VERSION__."
+#endif

-- 
Joseph S. Myers
joseph@codesourcery.com



More information about the Gcc-patches mailing list