public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Add -std=c18 etc. option aliases
@ 2017-11-16 23:10 Joseph Myers
  2017-11-16 23:34 ` Mike Stump
  0 siblings, 1 reply; 4+ messages in thread
From: Joseph Myers @ 2017-11-16 23:10 UTC (permalink / raw)
  To: gcc-patches

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Add -std=c18 etc. option aliases
  2017-11-16 23:10 Add -std=c18 etc. option aliases Joseph Myers
@ 2017-11-16 23:34 ` Mike Stump
  2017-11-17  0:15   ` Joseph Myers
  0 siblings, 1 reply; 4+ messages in thread
From: Mike Stump @ 2017-11-16 23:34 UTC (permalink / raw)
  To: Joseph Myers; +Cc: gcc-patches

On Nov 16, 2017, at 2:24 PM, Joseph Myers <joseph@codesourcery.com> wrote:
> 
> 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.

C++98 was similar.  The last draft was in 97, but, the actual ISO standard was 98.   I think the ANSI version was done in 97.  The name 97 is never, ever used, and c++98 names it pretty well.  cplusplus has a 97 date on it.  If there was no major release with c17, I would ditch the c17 spelling and just change it to c18 now.  :-)  I know, kinda sucks, but, until published, it just doesn't exist.  This is why we use 0x, and other names that we can safely deprecate for c++.  Concerning iso9899:2017, naming an actual document that doesn't exist, strikes me as wrong.  I've advise against it.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Add -std=c18 etc. option aliases
  2017-11-16 23:34 ` Mike Stump
@ 2017-11-17  0:15   ` Joseph Myers
  2017-11-17  7:47     ` Jakub Jelinek
  0 siblings, 1 reply; 4+ messages in thread
From: Joseph Myers @ 2017-11-17  0:15 UTC (permalink / raw)
  To: Mike Stump; +Cc: gcc-patches

On Thu, 16 Nov 2017, Mike Stump wrote:

> date on it.  If there was no major release with c17, I would ditch the 
> c17 spelling and just change it to c18 now.  :-)  I know, kinda sucks, 

There is no evidence yet of anyone using the C18 name.  So far, it's 
consistently being referred to as C17 in development, even after the 
timescale for the ballot / publication has become clear.  But given the 
possibility that some people might think of it as C18 based on the 
publication date, being prepared with aliases seems useful.

The name -std=iso9899:2017 follows the precedent of -std=iso9899:199409 in 
being based on the __STDC_VERSION__ value rather than the publication 
date.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Add -std=c18 etc. option aliases
  2017-11-17  0:15   ` Joseph Myers
@ 2017-11-17  7:47     ` Jakub Jelinek
  0 siblings, 0 replies; 4+ messages in thread
From: Jakub Jelinek @ 2017-11-17  7:47 UTC (permalink / raw)
  To: Joseph Myers; +Cc: Mike Stump, gcc-patches

On Thu, Nov 16, 2017 at 11:34:07PM +0000, Joseph Myers wrote:
> On Thu, 16 Nov 2017, Mike Stump wrote:
> 
> > date on it.  If there was no major release with c17, I would ditch the 
> > c17 spelling and just change it to c18 now.  :-)  I know, kinda sucks, 
> 
> There is no evidence yet of anyone using the C18 name.  So far, it's 
> consistently being referred to as C17 in development, even after the 
> timescale for the ballot / publication has become clear.  But given the 
> possibility that some people might think of it as C18 based on the 
> publication date, being prepared with aliases seems useful.
> 
> The name -std=iso9899:2017 follows the precedent of -std=iso9899:199409 in 
> being based on the __STDC_VERSION__ value rather than the publication 
> date.

Note AFAIK C++14 has been published in January 2015 too, initially
14882:2015 and then changed to 14882:2014.

	Jakub

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-11-17  7:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-16 23:10 Add -std=c18 etc. option aliases Joseph Myers
2017-11-16 23:34 ` Mike Stump
2017-11-17  0:15   ` Joseph Myers
2017-11-17  7:47     ` Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).