From 1e39313ac00c633263dfd11e06b782c9d988cad8 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Thu, 16 Nov 2017 22:23:30 +0000 Subject: [PATCH] Add -std=c18 etc. option aliases. 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. gcc: * 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: * 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: * gcc.dg/c18-version-1.c, gcc.dg/c18-version-2.c: New tests. From-SVN: r254847 --- gcc/ChangeLog | 7 +++++++ gcc/c-family/ChangeLog | 6 ++++++ gcc/c-family/c.opt | 18 +++++++++++++++--- gcc/doc/invoke.texi | 6 +++++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/c18-version-1.c | 9 +++++++++ gcc/testsuite/gcc.dg/c18-version-2.c | 9 +++++++++ 7 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/c18-version-1.c create mode 100644 gcc/testsuite/gcc.dg/c18-version-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 00b4172c8f7..4e7f0af54fa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-11-16 Joseph Myers + + * doc/invoke.texi (-std=c17): Refer to 2018 expected publication + date of C17. + (-std=c18, -std=iso9899:2018, -std=gnu18): Document option + aliases. + 2017-11-16 Thomas Koenig PR bootstrap/82856 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 3127635056c..990cd6163bc 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2017-11-16 Joseph Myers + + * 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. + 2017-11-15 Joseph Myers PR c/81156 diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 479ae63bb0e..d857dfc3792 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1950,7 +1950,11 @@ Deprecated in favor of -std=c11. 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) @@ -2016,7 +2020,11 @@ Deprecated in favor of -std=gnu11. 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) @@ -2056,7 +2064,11 @@ Conform to the ISO 2011 C standard. 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 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 6384bc62a13..1e2b869885b 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1832,8 +1832,11 @@ Annexes F and G) and the optional Annexes K (Bounds-checking 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 @@ GNU dialect of ISO C11. 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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 180f4db0cdc..f9221894efd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-11-16 Joseph Myers + + * gcc.dg/c18-version-1.c, gcc.dg/c18-version-2.c: New tests. + 2017-11-15 Michael Meissner * gcc.target/powerpc/bfp/bfp.exp: Look for *.c files, not *.c* diff --git a/gcc/testsuite/gcc.dg/c18-version-1.c b/gcc/testsuite/gcc.dg/c18-version-1.c new file mode 100644 index 00000000000..9acd02461a6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c18-version-1.c @@ -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 diff --git a/gcc/testsuite/gcc.dg/c18-version-2.c b/gcc/testsuite/gcc.dg/c18-version-2.c new file mode 100644 index 00000000000..8786402bb64 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c18-version-2.c @@ -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 -- 2.30.2