Tom Honermann 60468d6cd4 c++: Fix pragma suppression of -Wc++20-compat diagnostics [PR106423]
Gcc's '#pragma GCC diagnostic' directives are processed in "early mode"
(see handle_pragma_diagnostic_early) for the C++ frontend and, as such,
require that the target diagnostic option be enabled for the preprocessor
(see c_option_is_from_cpp_diagnostics).  This change modifies the
-Wc++20-compat option definition to register it as a preprocessor option
so that its associated diagnostics can be suppressed.  The changes also
implicitly disable the option in C++20 and later modes.  These changes
are consistent with the definition of the -Wc++11-compat option.

This support is motivated by the need to suppress the following diagnostic
otherwise issued in C++17 and earlier modes due to the char8_t typedef
present in the uchar.h header file in glibc 2.36.
  warning: identifier ‘char8_t’ is a keyword in C++20 [-Wc++20-compat]

Tests are added to validate suppression of both -Wc++11-compat and
-Wc++20-compat related diagnostics (fixes were only needed for the C++20
case).

	PR c++/106423

gcc/c-family/ChangeLog:
	* c-opts.cc (c_common_post_options): Disable -Wc++20-compat
	diagnostics in C++20 and later.
	* c.opt (Wc++20-compat): Enable hooks for the preprocessor.

gcc/cp/ChangeLog:
	* parser.cc (cp_lexer_saving_tokens): Add comment regarding
	diagnostic requirements.

gcc/testsuite/ChangeLog:
	* g++.dg/cpp0x/keywords2.C: New test.
	* g++.dg/cpp2a/keywords2.C: New test.

libcpp/ChangeLog:
	* include/cpplib.h (cpp_warning_reason): Add CPP_W_CXX20_COMPAT.
	* init.cc (cpp_create_reader): Add cpp_warn_cxx20_compat.
2022-08-16 15:15:38 -04:00
2022-03-19 00:16:22 +00:00
2022-08-02 00:16:51 +00:00
2022-08-03 00:16:48 +00:00
2022-02-28 00:16:17 +00:00
2021-10-23 00:16:26 +00:00
2022-02-14 00:16:23 +00:00
2022-07-13 00:16:33 +00:00
2021-11-30 00:16:44 +00:00
2022-01-03 10:42:10 +01:00
2022-08-09 00:16:47 +00:00
2022-07-09 00:16:54 +00:00
2022-06-28 00:16:58 +00:00
2022-06-04 00:16:27 +00:00
2022-05-21 00:16:32 +00:00
2021-11-16 00:16:31 +00:00
2022-08-16 23:34:20 +08:00
2022-08-02 00:16:51 +00:00
2022-07-30 10:35:23 -07:00
2022-07-30 00:16:30 +00:00
2022-07-23 00:16:27 +00:00
2022-06-03 00:16:40 +00:00
2022-01-03 10:42:10 +01:00
2022-07-05 00:16:36 +00:00
2022-08-04 00:16:49 +00:00
2022-01-12 00:16:39 +00:00
2022-01-03 10:42:10 +01:00
2022-08-09 00:16:47 +00:00
2022-01-03 10:42:10 +01:00
2022-08-02 00:16:51 +00:00
2022-07-29 00:16:21 +00:00
2021-12-17 00:16:20 +00:00
2022-07-19 17:07:04 +03:00
2022-08-05 00:16:24 +00:00
2021-12-21 09:10:57 +01:00
2022-08-04 13:38:28 -07:00
2022-06-28 09:41:07 -03:00

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.
Description
No description provided
Readme 2.7 GiB
Languages
C++ 30.7%
C 30.1%
Ada 14.4%
D 6.1%
Go 5.7%
Other 12.5%