gcc/libcpp
Joseph Myers 9f936c8613 Add -std=c2x, -std=gnu2x, -Wc11-c2x-compat, C2X _Static_assert support.
Now new features are starting to be added to a C2X draft (in the C2x
branch of the C standard git repository, no public WG14 document yet),
it's time to add -std=c2x and associated options to GCC for use in
enabling C2X features.

This patch adds the expected set of options: -std=c2x, -std=gnu2x,
-Wc11-c2x-compat.  A first C2X feature is added (the only one so far
in the repository that's obviously relevant to GCC): support (as in
C++) for the string constant to be omitted in _Static_assert.  This
feature is duly also supported as an extension in earlier standard
modes (diagnosed with -pedantic, unless -Wno-c11-c2x-compat is given,
or with -Wc11-c2x-compat even in C2X mode).

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc/
	* doc/cpp.texi (__STDC_VERSION__): Document C2X handling.
	* doc/invoke.texi (-std=c2x, -std=gnu2x): Document new options.
	* doc/standards.texi (C Language): Document C2X.
	* dwarf2out.c (highest_c_language), config/rl78/rl78.c
	(rl78_option_override): Handle "GNU C2X" language name.

gcc/c/
	* c-errors.c (pedwarn_c11): New function.
	* c-parser.c (disable_extension_diagnostics): Save
	warn_c11_c2x_compat and set it to 0.
	(restore_extension_diagnostics): Restore warn_c11_c2x_compat.
	(c_parser_static_assert_declaration_no_semi): Handle
	_Static_assert without string constant.
	* c-tree.h (pedwarn_c11): New prototype.

gcc/c-family/
	* c-common.c (flag_isoc2x): New variable.
	* c-common.h (clk_c): Update comment to reference C2X.
	(flag_isoc99, flag_isoc11): Update comments to reference future
	standard versions in general.
	(flag_isoc2x): Declare.
	* c-opts.c (set_std_c2x): New function.
	(c_common_handle_option): Handle -std=c2x and -std=gnu2x.
	(set_std_c89, set_std_c99, set_std_c11, set_std_c17): Set
	flag_isoc2x to 0.
	* c.opt (Wc11-c2x-compat, std=c2x, std=gnu2x): New options.

gcc/testsuite/
	* gcc.dg/c11-static-assert-7.c, gcc.dg/c11-static-assert-8.c,
	gcc.dg/c11-static-assert-9.c, gcc.dg/c2x-static-assert-1.c,
	gcc.dg/c2x-static-assert-2.c, gcc.dg/c99-static-assert-2.c,
	gcc.dg/gnu2x-static-assert-1.c: New tests.
	* gcc.dg/missing-symbol-3.c: Update expected fix-it text.

libcpp/
	* include/cpplib.h (enum c_lang): Add CLK_GNUC2X and CLK_STDC2X.
	* init.c (lang_defaults): Add GNUC2X and STDC2X entries.
	(cpp_init_builtins): Define __STDC_VERSION__ to 202000L for C2X.

From-SVN: r265251
2018-10-18 00:58:54 +01:00
..
include Add -std=c2x, -std=gnu2x, -Wc11-c2x-compat, C2X _Static_assert support. 2018-10-18 00:58:54 +01:00
po Regenerate .pot files. 2018-07-25 15:31:18 +01:00
aclocal.m4
ChangeLog Add -std=c2x, -std=gnu2x, -Wc11-c2x-compat, C2X _Static_assert support. 2018-10-18 00:58:54 +01:00
ChangeLog.jit
charset.c Cleanup of libcpp diagnostic callbacks 2018-10-09 23:37:19 +00:00
config.in
configure
configure.ac
directives-only.c Update copyright years. 2018-01-03 11:03:58 +01:00
directives.c Cleanup of libcpp diagnostic callbacks 2018-10-09 23:37:19 +00:00
errors.c Cleanup of libcpp diagnostic callbacks 2018-10-09 23:37:19 +00:00
expr.c [PATCH] CPP Macro predicates 2018-08-16 13:51:38 +00:00
files.c [PATCH] CPP Macro predicates 2018-08-16 13:51:38 +00:00
identifiers.c [PATCH] CPP Macro predicates 2018-08-16 13:51:38 +00:00
init.c Add -std=c2x, -std=gnu2x, -Wc11-c2x-compat, C2X _Static_assert support. 2018-10-18 00:58:54 +01:00
internal.h [PATCH] Kill cpp-id-data.h 2018-08-20 14:20:04 +00:00
lex.c [PATCH] Macro body is trailing array 2018-08-17 16:07:19 +00:00
line-map.c [PATCH] A couple of line map fixes 2018-10-11 12:42:37 +00:00
location-example.txt
macro.c libcpp: show macro definition when used with wrong argument count 2018-10-11 13:21:28 +00:00
Makefile.in [PATCH] Kill cpp-id-data.h 2018-08-20 14:20:04 +00:00
makeucnid.c Update copyright years. 2018-01-03 11:03:58 +01:00
mkdeps.c Update copyright years. 2018-01-03 11:03:58 +01:00
pch.c [CPP PATCH] node type 2018-08-20 16:32:29 +00:00
symtab.c Update copyright years. 2018-01-03 11:03:58 +01:00
system.h * system.h: #include <new> earlier. 2018-05-23 13:13:30 -04:00
traditional.c [CPP PATCH] node type 2018-08-20 16:32:29 +00:00
ucnid.h Update copyright years. 2018-01-03 11:03:58 +01:00
ucnid.tab Update copyright years. 2018-01-03 11:03:58 +01:00