gcc/libcpp
Jakub Jelinek e020116db0 c, libcpp: Partially implement C2Y N3353 paper [PR117028]
The following patch partially implements the N3353 paper.
In particular, it adds support for the delimited escape sequences
(\u{123}, \x{123}, \o{123}) which were added already for C++23,
all I had to do is split the delimited escape sequence guarding from
named universal character escape sequence guards
(\N{LATIN CAPITAL LETTER C WITH CARON}), which C++23 has but C2Y doesn't
and emit different diagnostics for C from C++ for the delimited escape
sequences.
And it adds support for the new style of octal literals, 0o137 or 0O1777.
I have so far added that just for C and not C++, because I have no idea
whether C++ will want to handle it similarly.

What the patch doesn't do is any kind of diagnostics for obsoletion of
\137 or 0137, as discussed in the PR, I think it is way too early for that.
Perhaps some non-default warning later on.

2024-10-17  Jakub Jelinek  <jakub@redhat.com>

	PR c/117028
libcpp/
	* include/cpplib.h (struct cpp_options): Add named_uc_escape_seqs,
	octal_constants and cpp_warn_c23_c2y_compat members.
	(enum cpp_warning_reason): Add CPP_W_C23_C2Y_COMPAT enumerator.
	* init.cc (struct lang_flags): Add named_uc_escape_seqs and
	octal_constants bit-fields.
	(lang_defaults): Add initializers for them into the table.
	(cpp_set_lang): Initialize named_uc_escape_seqs and octal_constants.
	(cpp_create_reader): Initialize cpp_warn_c23_c2y_compat to -1.
	* charset.cc (_cpp_valid_ucn): Test
	CPP_OPTION (pfile, named_uc_escape_seqs) rather than
	CPP_OPTION (pfile, delimited_escape_seqs) in \N{} related tests.
	Change wording of C cpp_pedwarning for \u{} and emit
	-Wc23-c2y-compat warning for it too if needed.  Formatting fixes.
	(convert_hex): Change wording of C cpp_pedwarning for \u{} and emit
	-Wc23-c2y-compat warning for it too if needed.
	(convert_oct): Likewise.
	* expr.cc (cpp_classify_number): Handle C2Y 0o or 0O prefixed
	octal constants.
	(cpp_interpret_integer): Likewise.
gcc/c-family/
	* c.opt (Wc23-c2y-compat): Add CPP and CppReason parameters.
	* c-opts.cc (set_std_c2y): Use CLK_STDC2Y or CLK_GNUC2Y rather
	than CLK_STDC23 and CLK_GNUC23.  Formatting fix.
	* c-lex.cc (interpret_integer): Handle C2Y 0o or 0O prefixed
	and wb/WB/uwb/UWB suffixed octal constants.
gcc/testsuite/
	* gcc.dg/bitint-112.c: New test.
	* gcc.dg/c23-digit-separators-1.c: Add _Static_assert for
	valid binary constant with digit separator.
	* gcc.dg/c23-octal-constants-1.c: New test.
	* gcc.dg/c23-octal-constants-2.c: New test.
	* gcc.dg/c2y-digit-separators-1.c: New test.
	* gcc.dg/c2y-digit-separators-2.c: New test.
	* gcc.dg/c2y-octal-constants-1.c: New test.
	* gcc.dg/c2y-octal-constants-2.c: New test.
	* gcc.dg/c2y-octal-constants-3.c: New test.
	* gcc.dg/cpp/c23-delimited-escape-seq-1.c: New test.
	* gcc.dg/cpp/c23-delimited-escape-seq-2.c: New test.
	* gcc.dg/cpp/c2y-delimited-escape-seq-1.c: New test.
	* gcc.dg/cpp/c2y-delimited-escape-seq-2.c: New test.
	* gcc.dg/cpp/c2y-delimited-escape-seq-3.c: New test.
	* gcc.dg/cpp/c2y-delimited-escape-seq-4.c: New test.
	* gcc.dg/octal-constants-1.c: New test.
	* gcc.dg/octal-constants-2.c: New test.
	* gcc.dg/octal-constants-3.c: New test.
	* gcc.dg/octal-constants-4.c: New test.
	* gcc.dg/system-octal-constants-1.c: New test.
	* gcc.dg/system-octal-constants-1.h: New file.
2024-10-17 07:01:44 +02:00
..
include c, libcpp: Partially implement C2Y N3353 paper [PR117028] 2024-10-17 07:01:44 +02:00
po Daily bump. 2024-09-20 17:36:00 +00:00
aclocal.m4 libcpp: Regenerate aclocal.m4 and configure [PR 114748] 2024-04-17 14:08:34 +00:00
ChangeLog Daily bump. 2024-10-16 11:37:33 +00:00
ChangeLog.jit
charset.cc c, libcpp: Partially implement C2Y N3353 paper [PR117028] 2024-10-17 07:01:44 +02:00
combining-chars.inc diagnostics: add support for "text art" diagrams 2023-06-21 21:49:00 -04:00
config.in libcpp: replace SSE4.2 helper with an SSSE3 one 2024-08-20 14:09:12 +03:00
configure libcpp: replace SSE4.2 helper with an SSSE3 one 2024-08-20 14:09:12 +03:00
configure.ac libcpp: replace SSE4.2 helper with an SSSE3 one 2024-08-20 14:09:12 +03:00
directives.cc libcpp: Fix _Pragma("GCC system_header") [PR114436] 2024-10-14 09:52:02 -04:00
errors.cc libcpp: Support extended characters for #pragma {push,pop}_macro [PR109704] 2024-10-14 09:42:56 -04:00
expr.cc c, libcpp: Partially implement C2Y N3353 paper [PR117028] 2024-10-17 07:01:44 +02:00
files.cc libcpp, c, middle-end: Optimize initializers using #embed in C 2024-10-16 10:32:27 +02:00
generated_cpp_wcwidth.h contrib, libcpp, libstdc++: Update to Unicode 16.0 2024-10-08 10:01:47 +02:00
identifiers.cc Update copyright years. 2024-01-03 12:19:35 +01:00
init.cc c, libcpp: Partially implement C2Y N3353 paper [PR117028] 2024-10-17 07:01:44 +02:00
internal.h libcpp: Add -Wtrailing-blanks warning 2024-10-15 08:01:40 +02:00
lex.cc libcpp: Add -Wtrailing-blanks warning 2024-10-15 08:01:40 +02:00
line-map.cc diagnostics: SARIF output: potentially add escaped renderings of source (§3.3.4) 2024-07-24 18:07:54 -04:00
location-example.txt
macro.cc libcpp, genmatch: Use gcc_diag instead of printf for libcpp diagnostics 2024-10-12 10:50:41 +02:00
Makefile.in libcpp, genmatch: Use gcc_diag instead of printf for libcpp diagnostics 2024-10-12 10:50:41 +02:00
makeucnid.cc contrib, libcpp, libstdc++: Update to Unicode 16.0 2024-10-08 10:01:47 +02:00
makeuname2c.cc contrib, libcpp, libstdc++: Update to Unicode 16.0 2024-10-08 10:01:47 +02:00
mkdeps.cc c++: add module extensions 2024-05-29 09:48:05 -04:00
pch.cc libcpp, genmatch: Use gcc_diag instead of printf for libcpp diagnostics 2024-10-12 10:50:41 +02:00
printable-chars.inc diagnostics: add support for "text art" diagrams 2023-06-21 21:49:00 -04:00
symtab.cc Update copyright years. 2024-01-03 12:19:35 +01:00
system.h Update copyright years. 2024-01-03 12:19:35 +01:00
traditional.cc libcpp, genmatch: Use gcc_diag instead of printf for libcpp diagnostics 2024-10-12 10:50:41 +02:00
ucnid.h contrib, libcpp, libstdc++: Update to Unicode 16.0 2024-10-08 10:01:47 +02:00
ucnid.tab Update copyright years. 2024-01-03 12:19:35 +01:00
uname2c.h contrib, libcpp, libstdc++: Update to Unicode 16.0 2024-10-08 10:01:47 +02:00