diff mbox series

libcpp, genmatch: Use gcc_diag instead of printf for libcpp diagnostics

Message ID ZuQZmIAvUsRm5OOX@tucnak
State New
Headers show
Series libcpp, genmatch: Use gcc_diag instead of printf for libcpp diagnostics | expand

Commit Message

Jakub Jelinek Sept. 13, 2024, 10:53 a.m. UTC
Hi!

When working on #embed support, or -Wheader-guard or other recent libcpp
changes, I've been annoyed by the libcpp diagnostics being visually
different from normal gcc diagnostics, especially in the area of quoting
stuff in the diagnostic messages.
Normall GCC diagnostics is gcc_diag/gcc_tdiag, one can use
%</%>, %qs etc. in there, while libcpp diagnostics was marked as printf
and in libcpp we've been very creative with quoting stuff, either
no quotes at all, or "something" quoting, or 'something' quoting, or
`something' quoting (but in none of the cases it used colors consistently
with the rest of the compiler).

Now, libcpp diagnostics is always emitted using a callback,
pfile->cb.diagnostic.  On the gcc/ side, this callback is initialized with
genmatch.cc:  cb->diagnostic = diagnostic_cb;
c-family/c-opts.cc:  cb->diagnostic = c_cpp_diagnostic;
fortran/cpp.cc:  cb->diagnostic = cb_cpp_diagnostic;
where the latter two just use diagnostic_report_diagnostic, so actually
support all the gcc_diag stuff, only the genmatch.cc case didn't.

So, the following patch changes genmatch.cc to use pp_format* instead
of vfprintf so that it supports the gcc_diag formatting (pretty-print.o
unfortunately has various dependencies, so had to link genmatch with
libcommon.a libbacktrace.a and tweak Makefile.in so that there are no
circular dependencies) and marks the libcpp diagnostic routines as
gcc_diag rather than printf.  That change resulted in hundreds of
-Wformat-diag new warnings (most of them useful and resulting IMHO in
better diagnostics), so the rest of the patch is changing the format
strings to make -Wformat-diag happy and adjusting the testsuite for
the differences in how is the diagnostic reformatted.

Dunno if some out of GCC tree projects use libcpp, that case would
make it harder because one couldn't use vfprintf in the diagnostic
callback anymore, but there is always David's libdiagnostic which could
be used for that purpose IMHO.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2024-09-13  Jakub Jelinek  <jakub@redhat.com>

libcpp/
	* include/cpplib.h (ATTRIBUTE_CPP_PPDIAG): Define.
	(struct cpp_callbacks): Use ATTRIBUTE_CPP_PPDIAG instead of
	ATTRIBUTE_FPTR_PRINTF on diagnostic callback.
	(cpp_error, cpp_warning, cpp_pedwarning, cpp_warning_syshdr): Use
	ATTRIBUTE_CPP_PPDIAG (3, 4) instead of ATTRIBUTE_PRINTF_3.
	(cpp_warning_at, cpp_pedwarning_at): Use ATTRIBUTE_CPP_PPDIAG (4, 5)
	instead of ATTRIBUTE_PRINTF_4.
	(cpp_error_with_line, cpp_warning_with_line, cpp_pedwarning_with_line,
	cpp_warning_with_line_syshdr): Use ATTRIBUTE_CPP_PPDIAG (5, 6)
	instead of ATTRIBUTE_PRINTF_5.
	(cpp_error_at): Use ATTRIBUTE_CPP_PPDIAG (4, 5) instead of
	ATTRIBUTE_PRINTF_4.
	* Makefile.in (po/$(PACKAGE).pot): Use --language=GCC-source rather
	than --language=c.
	* errors.cc (cpp_diagnostic_at, cpp_diagnostic,
	cpp_diagnostic_with_line): Use ATTRIBUTE_CPP_PPDIAG instead of
	-ATTRIBUTE_FPTR_PRINTF.
	* charset.cc (cpp_host_to_exec_charset, _cpp_valid_ucn, convert_hex,
	convert_oct, convert_escape): Fix up -Wformat-diag warnings.
	(cpp_interpret_string_ranges, count_source_chars): Use
	ATTRIBUTE_CPP_PPDIAG instead of ATTRIBUTE_FPTR_PRINTF.
	(narrow_str_to_charconst): Fix up -Wformat-diag warnings.
	* directives.cc (check_eol_1, directive_diagnostics, lex_macro_node,
	do_undef, glue_header_name, parse_include, do_include_common,
	do_include_next, _cpp_parse_embed_params, do_embed, read_flag,
	do_line, do_linemarker, register_pragma_1, do_pragma_once,
	do_pragma_push_macro, do_pragma_pop_macro, do_pragma_poison,
	do_pragma_system_header, do_pragma_warning_or_error, _cpp_do__Pragma,
	do_else, do_elif, do_endif, parse_answer, do_assert,
	cpp_define_unused): Likewise.
	* expr.cc (cpp_classify_number, parse_defined, eval_token,
	_cpp_parse_expr, reduce, check_promotion): Likewise.
	* files.cc (_cpp_find_file, finish_base64_embed): Likewise.
	* init.cc (sanity_checks): Likewise.
	* lex.cc (_cpp_process_line_notes, maybe_warn_bidi_on_char,
	_cpp_warn_invalid_utf8, _cpp_skip_block_comment,
	warn_about_normalization, forms_identifier_p, maybe_va_opt_error,
	identifier_diagnostics_on_lex, cpp_maybe_module_directive): Likewise.
	* macro.cc (class vaopt_state, builtin_has_include_1,
	builtin_has_include, builtin_has_embed, _cpp_warn_if_unused_macro,
	_cpp_builtin_macro_text, builtin_macro, stringify_arg,
	_cpp_arguments_ok, collect_args, enter_macro_context,
	_cpp_save_parameter, parse_params, create_iso_definition,
	_cpp_create_definition, check_trad_stringification): Likewise.
	* pch.cc (cpp_valid_state): Likewise.
	* traditional.cc (_cpp_scan_out_logical_line, recursive_macro):
	Likewise.
gcc/
	* Makefile.in (generated_files): Remove {gimple,generic}-match*.
	(generated_match_files): New variable.  Add a dependency of
	$(filter-out $(OBJS-libcommon),$(ALL_HOST_OBJS)) files on those.
	(build/genmatch$(build_exeext)): Depend on and link against
	libcommon.a and $(LIBBACKTRACE).
	* genmatch.cc: Include pretty-print.h and input.h.
	(ggc_internal_cleared_alloc, ggc_free): Remove.
	(fatal): New function.
	(line_table): Remove.
	(linemap_client_expand_location_to_spelling_point): Remove.
	(diagnostic_cb): Use gcc_diag rather than printf format.  Use
	pp_format_verbatim on a temporary pretty_printer instead of
	vfprintf.
	(fatal_at, warning_at): Use gcc_diag rather than printf format.
	(output_line_directive): Rename location_hash to loc_hash.
	(parser::eat_ident, parser::parse_operation, parser::parse_expr,
	parser::parse_pattern, parser::finish_match_operand): Fix up
	-Wformat-diag warnings.
gcc/c-family/
	* c-lex.cc (c_common_has_attribute,
	c_common_lex_availability_macro): Fix up -Wformat-diag warnings.
gcc/testsuite/
	* c-c++-common/cpp/counter-2.c: Adjust expected diagnostics for
	libcpp diagnostic formatting changes.
	* c-c++-common/cpp/embed-3.c: Likewise.
	* c-c++-common/cpp/embed-4.c: Likewise.
	* c-c++-common/cpp/embed-16.c: Likewise.
	* c-c++-common/cpp/embed-18.c: Likewise.
	* c-c++-common/cpp/eof-2.c: Likewise.
	* c-c++-common/cpp/eof-3.c: Likewise.
	* c-c++-common/cpp/fmax-include-depth.c: Likewise.
	* c-c++-common/cpp/has-builtin.c: Likewise.
	* c-c++-common/cpp/line-2.c: Likewise.
	* c-c++-common/cpp/line-3.c: Likewise.
	* c-c++-common/cpp/macro-arg-count-1.c: Likewise.
	* c-c++-common/cpp/macro-arg-count-2.c: Likewise.
	* c-c++-common/cpp/macro-ranges.c: Likewise.
	* c-c++-common/cpp/named-universal-char-escape-4.c: Likewise.
	* c-c++-common/cpp/named-universal-char-escape-5.c: Likewise.
	* c-c++-common/cpp/pr88974.c: Likewise.
	* c-c++-common/cpp/va-opt-error.c: Likewise.
	* c-c++-common/cpp/va-opt-pedantic.c: Likewise.
	* c-c++-common/cpp/Winvalid-utf8-1.c: Likewise.
	* c-c++-common/cpp/Winvalid-utf8-2.c: Likewise.
	* c-c++-common/cpp/Winvalid-utf8-3.c: Likewise.
	* c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-1.c:
	Likewise.
	* c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-3.c:
	Likewise.
	* c-c++-common/pr68833-3.c: Likewise.
	* c-c++-common/raw-string-directive-1.c: Likewise.
	* gcc.dg/analyzer/named-constants-Wunused-macros.c: Likewise.
	* gcc.dg/binary-constants-4.c: Likewise.
	* gcc.dg/builtin-redefine.c: Likewise.
	* gcc.dg/cpp/19951025-1.c: Likewise.
	* gcc.dg/cpp/c11-warning-1.c: Likewise.
	* gcc.dg/cpp/c11-warning-2.c: Likewise.
	* gcc.dg/cpp/c11-warning-3.c: Likewise.
	* gcc.dg/cpp/c23-elifdef-2.c: Likewise.
	* gcc.dg/cpp/c23-warning-2.c: Likewise.
	* gcc.dg/cpp/embed-2.c: Likewise.
	* gcc.dg/cpp/embed-3.c: Likewise.
	* gcc.dg/cpp/embed-4.c: Likewise.
	* gcc.dg/cpp/expr.c: Likewise.
	* gcc.dg/cpp/gnu11-elifdef-2.c: Likewise.
	* gcc.dg/cpp/gnu11-elifdef-3.c: Likewise.
	* gcc.dg/cpp/gnu11-elifdef-4.c: Likewise.
	* gcc.dg/cpp/gnu11-warning-1.c: Likewise.
	* gcc.dg/cpp/gnu11-warning-2.c: Likewise.
	* gcc.dg/cpp/gnu11-warning-3.c: Likewise.
	* gcc.dg/cpp/gnu23-warning-2.c: Likewise.
	* gcc.dg/cpp/include6.c: Likewise.
	* gcc.dg/cpp/pr35322.c: Likewise.
	* gcc.dg/cpp/tr-warn6.c: Likewise.
	* gcc.dg/cpp/undef2.c: Likewise.
	* gcc.dg/cpp/warn-comments.c: Likewise.
	* gcc.dg/cpp/warn-comments-2.c: Likewise.
	* gcc.dg/cpp/warn-comments-3.c: Likewise.
	* gcc.dg/cpp/warn-cxx-compat.c: Likewise.
	* gcc.dg/cpp/warn-cxx-compat-2.c: Likewise.
	* gcc.dg/cpp/warn-deprecated.c: Likewise.
	* gcc.dg/cpp/warn-deprecated-2.c: Likewise.
	* gcc.dg/cpp/warn-long-long.c: Likewise.
	* gcc.dg/cpp/warn-long-long-2.c: Likewise.
	* gcc.dg/cpp/warn-normalized-1.c: Likewise.
	* gcc.dg/cpp/warn-normalized-2.c: Likewise.
	* gcc.dg/cpp/warn-normalized-3.c: Likewise.
	* gcc.dg/cpp/warn-normalized-4-bytes.c: Likewise.
	* gcc.dg/cpp/warn-normalized-4-unicode.c: Likewise.
	* gcc.dg/cpp/warn-redefined.c: Likewise.
	* gcc.dg/cpp/warn-redefined-2.c: Likewise.
	* gcc.dg/cpp/warn-traditional.c: Likewise.
	* gcc.dg/cpp/warn-traditional-2.c: Likewise.
	* gcc.dg/cpp/warn-trigraphs-1.c: Likewise.
	* gcc.dg/cpp/warn-trigraphs-2.c: Likewise.
	* gcc.dg/cpp/warn-trigraphs-3.c: Likewise.
	* gcc.dg/cpp/warn-trigraphs-4.c: Likewise.
	* gcc.dg/cpp/warn-undef.c: Likewise.
	* gcc.dg/cpp/warn-undef-2.c: Likewise.
	* gcc.dg/cpp/warn-unused-macros.c: Likewise.
	* gcc.dg/cpp/warn-unused-macros-2.c: Likewise.
	* gcc.dg/pch/counter-2.c: Likewise.
	* g++.dg/cpp0x/udlit-error1.C: Likewise.
	* g++.dg/cpp23/named-universal-char-escape1.C: Likewise.
	* g++.dg/cpp23/named-universal-char-escape2.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-1.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-2.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-3.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-4.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-5.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-6.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-7.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-8.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-9.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-10.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-11.C: Likewise.
	* g++.dg/cpp23/Winvalid-utf8-12.C: Likewise.
	* g++.dg/cpp/elifdef-3.C: Likewise.
	* g++.dg/cpp/elifdef-5.C: Likewise.
	* g++.dg/cpp/elifdef-6.C: Likewise.
	* g++.dg/cpp/elifdef-7.C: Likewise.
	* g++.dg/cpp/embed-1.C: Likewise.
	* g++.dg/cpp/embed-2.C: Likewise.
	* g++.dg/cpp/pedantic-errors.C: Likewise.
	* g++.dg/cpp/warning-1.C: Likewise.
	* g++.dg/cpp/warning-2.C: Likewise.
	* g++.dg/ext/bitint1.C: Likewise.
	* g++.dg/ext/bitint2.C: Likewise.


	Jakub

Comments

Richard Biener Sept. 13, 2024, 11:19 a.m. UTC | #1
On Fri, 13 Sep 2024, Jakub Jelinek wrote:

> Hi!
> 
> When working on #embed support, or -Wheader-guard or other recent libcpp
> changes, I've been annoyed by the libcpp diagnostics being visually
> different from normal gcc diagnostics, especially in the area of quoting
> stuff in the diagnostic messages.
> Normall GCC diagnostics is gcc_diag/gcc_tdiag, one can use
> %</%>, %qs etc. in there, while libcpp diagnostics was marked as printf
> and in libcpp we've been very creative with quoting stuff, either
> no quotes at all, or "something" quoting, or 'something' quoting, or
> `something' quoting (but in none of the cases it used colors consistently
> with the rest of the compiler).
> 
> Now, libcpp diagnostics is always emitted using a callback,
> pfile->cb.diagnostic.  On the gcc/ side, this callback is initialized with
> genmatch.cc:  cb->diagnostic = diagnostic_cb;
> c-family/c-opts.cc:  cb->diagnostic = c_cpp_diagnostic;
> fortran/cpp.cc:  cb->diagnostic = cb_cpp_diagnostic;
> where the latter two just use diagnostic_report_diagnostic, so actually
> support all the gcc_diag stuff, only the genmatch.cc case didn't.
> 
> So, the following patch changes genmatch.cc to use pp_format* instead
> of vfprintf so that it supports the gcc_diag formatting (pretty-print.o
> unfortunately has various dependencies, so had to link genmatch with
> libcommon.a libbacktrace.a and tweak Makefile.in so that there are no
> circular dependencies) and marks the libcpp diagnostic routines as
> gcc_diag rather than printf.  That change resulted in hundreds of
> -Wformat-diag new warnings (most of them useful and resulting IMHO in
> better diagnostics), so the rest of the patch is changing the format
> strings to make -Wformat-diag happy and adjusting the testsuite for
> the differences in how is the diagnostic reformatted.
> 
> Dunno if some out of GCC tree projects use libcpp, that case would
> make it harder because one couldn't use vfprintf in the diagnostic
> callback anymore, but there is always David's libdiagnostic which could
> be used for that purpose IMHO.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

The genmatch.cc parts are OK - I wonder how much the new dependences
push gimple-match* and generic-match* compilation to the end?

Richard.

> 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
> 
> libcpp/
> 	* include/cpplib.h (ATTRIBUTE_CPP_PPDIAG): Define.
> 	(struct cpp_callbacks): Use ATTRIBUTE_CPP_PPDIAG instead of
> 	ATTRIBUTE_FPTR_PRINTF on diagnostic callback.
> 	(cpp_error, cpp_warning, cpp_pedwarning, cpp_warning_syshdr): Use
> 	ATTRIBUTE_CPP_PPDIAG (3, 4) instead of ATTRIBUTE_PRINTF_3.
> 	(cpp_warning_at, cpp_pedwarning_at): Use ATTRIBUTE_CPP_PPDIAG (4, 5)
> 	instead of ATTRIBUTE_PRINTF_4.
> 	(cpp_error_with_line, cpp_warning_with_line, cpp_pedwarning_with_line,
> 	cpp_warning_with_line_syshdr): Use ATTRIBUTE_CPP_PPDIAG (5, 6)
> 	instead of ATTRIBUTE_PRINTF_5.
> 	(cpp_error_at): Use ATTRIBUTE_CPP_PPDIAG (4, 5) instead of
> 	ATTRIBUTE_PRINTF_4.
> 	* Makefile.in (po/$(PACKAGE).pot): Use --language=GCC-source rather
> 	than --language=c.
> 	* errors.cc (cpp_diagnostic_at, cpp_diagnostic,
> 	cpp_diagnostic_with_line): Use ATTRIBUTE_CPP_PPDIAG instead of
> 	-ATTRIBUTE_FPTR_PRINTF.
> 	* charset.cc (cpp_host_to_exec_charset, _cpp_valid_ucn, convert_hex,
> 	convert_oct, convert_escape): Fix up -Wformat-diag warnings.
> 	(cpp_interpret_string_ranges, count_source_chars): Use
> 	ATTRIBUTE_CPP_PPDIAG instead of ATTRIBUTE_FPTR_PRINTF.
> 	(narrow_str_to_charconst): Fix up -Wformat-diag warnings.
> 	* directives.cc (check_eol_1, directive_diagnostics, lex_macro_node,
> 	do_undef, glue_header_name, parse_include, do_include_common,
> 	do_include_next, _cpp_parse_embed_params, do_embed, read_flag,
> 	do_line, do_linemarker, register_pragma_1, do_pragma_once,
> 	do_pragma_push_macro, do_pragma_pop_macro, do_pragma_poison,
> 	do_pragma_system_header, do_pragma_warning_or_error, _cpp_do__Pragma,
> 	do_else, do_elif, do_endif, parse_answer, do_assert,
> 	cpp_define_unused): Likewise.
> 	* expr.cc (cpp_classify_number, parse_defined, eval_token,
> 	_cpp_parse_expr, reduce, check_promotion): Likewise.
> 	* files.cc (_cpp_find_file, finish_base64_embed): Likewise.
> 	* init.cc (sanity_checks): Likewise.
> 	* lex.cc (_cpp_process_line_notes, maybe_warn_bidi_on_char,
> 	_cpp_warn_invalid_utf8, _cpp_skip_block_comment,
> 	warn_about_normalization, forms_identifier_p, maybe_va_opt_error,
> 	identifier_diagnostics_on_lex, cpp_maybe_module_directive): Likewise.
> 	* macro.cc (class vaopt_state, builtin_has_include_1,
> 	builtin_has_include, builtin_has_embed, _cpp_warn_if_unused_macro,
> 	_cpp_builtin_macro_text, builtin_macro, stringify_arg,
> 	_cpp_arguments_ok, collect_args, enter_macro_context,
> 	_cpp_save_parameter, parse_params, create_iso_definition,
> 	_cpp_create_definition, check_trad_stringification): Likewise.
> 	* pch.cc (cpp_valid_state): Likewise.
> 	* traditional.cc (_cpp_scan_out_logical_line, recursive_macro):
> 	Likewise.
> gcc/
> 	* Makefile.in (generated_files): Remove {gimple,generic}-match*.
> 	(generated_match_files): New variable.  Add a dependency of
> 	$(filter-out $(OBJS-libcommon),$(ALL_HOST_OBJS)) files on those.
> 	(build/genmatch$(build_exeext)): Depend on and link against
> 	libcommon.a and $(LIBBACKTRACE).
> 	* genmatch.cc: Include pretty-print.h and input.h.
> 	(ggc_internal_cleared_alloc, ggc_free): Remove.
> 	(fatal): New function.
> 	(line_table): Remove.
> 	(linemap_client_expand_location_to_spelling_point): Remove.
> 	(diagnostic_cb): Use gcc_diag rather than printf format.  Use
> 	pp_format_verbatim on a temporary pretty_printer instead of
> 	vfprintf.
> 	(fatal_at, warning_at): Use gcc_diag rather than printf format.
> 	(output_line_directive): Rename location_hash to loc_hash.
> 	(parser::eat_ident, parser::parse_operation, parser::parse_expr,
> 	parser::parse_pattern, parser::finish_match_operand): Fix up
> 	-Wformat-diag warnings.
> gcc/c-family/
> 	* c-lex.cc (c_common_has_attribute,
> 	c_common_lex_availability_macro): Fix up -Wformat-diag warnings.
> gcc/testsuite/
> 	* c-c++-common/cpp/counter-2.c: Adjust expected diagnostics for
> 	libcpp diagnostic formatting changes.
> 	* c-c++-common/cpp/embed-3.c: Likewise.
> 	* c-c++-common/cpp/embed-4.c: Likewise.
> 	* c-c++-common/cpp/embed-16.c: Likewise.
> 	* c-c++-common/cpp/embed-18.c: Likewise.
> 	* c-c++-common/cpp/eof-2.c: Likewise.
> 	* c-c++-common/cpp/eof-3.c: Likewise.
> 	* c-c++-common/cpp/fmax-include-depth.c: Likewise.
> 	* c-c++-common/cpp/has-builtin.c: Likewise.
> 	* c-c++-common/cpp/line-2.c: Likewise.
> 	* c-c++-common/cpp/line-3.c: Likewise.
> 	* c-c++-common/cpp/macro-arg-count-1.c: Likewise.
> 	* c-c++-common/cpp/macro-arg-count-2.c: Likewise.
> 	* c-c++-common/cpp/macro-ranges.c: Likewise.
> 	* c-c++-common/cpp/named-universal-char-escape-4.c: Likewise.
> 	* c-c++-common/cpp/named-universal-char-escape-5.c: Likewise.
> 	* c-c++-common/cpp/pr88974.c: Likewise.
> 	* c-c++-common/cpp/va-opt-error.c: Likewise.
> 	* c-c++-common/cpp/va-opt-pedantic.c: Likewise.
> 	* c-c++-common/cpp/Winvalid-utf8-1.c: Likewise.
> 	* c-c++-common/cpp/Winvalid-utf8-2.c: Likewise.
> 	* c-c++-common/cpp/Winvalid-utf8-3.c: Likewise.
> 	* c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-1.c:
> 	Likewise.
> 	* c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-3.c:
> 	Likewise.
> 	* c-c++-common/pr68833-3.c: Likewise.
> 	* c-c++-common/raw-string-directive-1.c: Likewise.
> 	* gcc.dg/analyzer/named-constants-Wunused-macros.c: Likewise.
> 	* gcc.dg/binary-constants-4.c: Likewise.
> 	* gcc.dg/builtin-redefine.c: Likewise.
> 	* gcc.dg/cpp/19951025-1.c: Likewise.
> 	* gcc.dg/cpp/c11-warning-1.c: Likewise.
> 	* gcc.dg/cpp/c11-warning-2.c: Likewise.
> 	* gcc.dg/cpp/c11-warning-3.c: Likewise.
> 	* gcc.dg/cpp/c23-elifdef-2.c: Likewise.
> 	* gcc.dg/cpp/c23-warning-2.c: Likewise.
> 	* gcc.dg/cpp/embed-2.c: Likewise.
> 	* gcc.dg/cpp/embed-3.c: Likewise.
> 	* gcc.dg/cpp/embed-4.c: Likewise.
> 	* gcc.dg/cpp/expr.c: Likewise.
> 	* gcc.dg/cpp/gnu11-elifdef-2.c: Likewise.
> 	* gcc.dg/cpp/gnu11-elifdef-3.c: Likewise.
> 	* gcc.dg/cpp/gnu11-elifdef-4.c: Likewise.
> 	* gcc.dg/cpp/gnu11-warning-1.c: Likewise.
> 	* gcc.dg/cpp/gnu11-warning-2.c: Likewise.
> 	* gcc.dg/cpp/gnu11-warning-3.c: Likewise.
> 	* gcc.dg/cpp/gnu23-warning-2.c: Likewise.
> 	* gcc.dg/cpp/include6.c: Likewise.
> 	* gcc.dg/cpp/pr35322.c: Likewise.
> 	* gcc.dg/cpp/tr-warn6.c: Likewise.
> 	* gcc.dg/cpp/undef2.c: Likewise.
> 	* gcc.dg/cpp/warn-comments.c: Likewise.
> 	* gcc.dg/cpp/warn-comments-2.c: Likewise.
> 	* gcc.dg/cpp/warn-comments-3.c: Likewise.
> 	* gcc.dg/cpp/warn-cxx-compat.c: Likewise.
> 	* gcc.dg/cpp/warn-cxx-compat-2.c: Likewise.
> 	* gcc.dg/cpp/warn-deprecated.c: Likewise.
> 	* gcc.dg/cpp/warn-deprecated-2.c: Likewise.
> 	* gcc.dg/cpp/warn-long-long.c: Likewise.
> 	* gcc.dg/cpp/warn-long-long-2.c: Likewise.
> 	* gcc.dg/cpp/warn-normalized-1.c: Likewise.
> 	* gcc.dg/cpp/warn-normalized-2.c: Likewise.
> 	* gcc.dg/cpp/warn-normalized-3.c: Likewise.
> 	* gcc.dg/cpp/warn-normalized-4-bytes.c: Likewise.
> 	* gcc.dg/cpp/warn-normalized-4-unicode.c: Likewise.
> 	* gcc.dg/cpp/warn-redefined.c: Likewise.
> 	* gcc.dg/cpp/warn-redefined-2.c: Likewise.
> 	* gcc.dg/cpp/warn-traditional.c: Likewise.
> 	* gcc.dg/cpp/warn-traditional-2.c: Likewise.
> 	* gcc.dg/cpp/warn-trigraphs-1.c: Likewise.
> 	* gcc.dg/cpp/warn-trigraphs-2.c: Likewise.
> 	* gcc.dg/cpp/warn-trigraphs-3.c: Likewise.
> 	* gcc.dg/cpp/warn-trigraphs-4.c: Likewise.
> 	* gcc.dg/cpp/warn-undef.c: Likewise.
> 	* gcc.dg/cpp/warn-undef-2.c: Likewise.
> 	* gcc.dg/cpp/warn-unused-macros.c: Likewise.
> 	* gcc.dg/cpp/warn-unused-macros-2.c: Likewise.
> 	* gcc.dg/pch/counter-2.c: Likewise.
> 	* g++.dg/cpp0x/udlit-error1.C: Likewise.
> 	* g++.dg/cpp23/named-universal-char-escape1.C: Likewise.
> 	* g++.dg/cpp23/named-universal-char-escape2.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-1.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-2.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-3.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-4.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-5.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-6.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-7.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-8.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-9.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-10.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-11.C: Likewise.
> 	* g++.dg/cpp23/Winvalid-utf8-12.C: Likewise.
> 	* g++.dg/cpp/elifdef-3.C: Likewise.
> 	* g++.dg/cpp/elifdef-5.C: Likewise.
> 	* g++.dg/cpp/elifdef-6.C: Likewise.
> 	* g++.dg/cpp/elifdef-7.C: Likewise.
> 	* g++.dg/cpp/embed-1.C: Likewise.
> 	* g++.dg/cpp/embed-2.C: Likewise.
> 	* g++.dg/cpp/pedantic-errors.C: Likewise.
> 	* g++.dg/cpp/warning-1.C: Likewise.
> 	* g++.dg/cpp/warning-2.C: Likewise.
> 	* g++.dg/ext/bitint1.C: Likewise.
> 	* g++.dg/ext/bitint2.C: Likewise.
> 
> --- libcpp/include/cpplib.h.jj	2024-09-12 23:12:54.044423930 +0200
> +++ libcpp/include/cpplib.h	2024-09-12 23:13:32.245876199 +0200
> @@ -649,6 +649,13 @@ struct cpp_options
>    cpp_main_search main_search : 8;
>  };
>  
> +#if GCC_VERSION >= 3005
> +#define ATTRIBUTE_CPP_PPDIAG(m, n) \
> +  __attribute__ ((__format__ (__gcc_diag__, m , n))) ATTRIBUTE_NONNULL(m)
> +#else
> +#define ATTRIBUTE_CPP_PPDIAG(m, n) ATTRIBUTE_NONNULL(m)
> +#endif
> +
>  /* Diagnostic levels.  To get a diagnostic without associating a
>     position in the translation unit with it, use cpp_error_with_line
>     with a line number of zero.  */
> @@ -754,7 +761,7 @@ struct cpp_callbacks
>  		      enum cpp_warning_reason,
>  		      rich_location *,
>  		      const char *, va_list *)
> -       ATTRIBUTE_FPTR_PRINTF(5,0);
> +       ATTRIBUTE_CPP_PPDIAG (5,0);
>  
>    /* Callbacks for when a macro is expanded, or tested (whether
>       defined or not at the time) in #ifdef, #ifndef or "defined".  */
> @@ -1351,24 +1359,24 @@ cpp_num cpp_num_sign_extend (cpp_num, si
>  /* Output a diagnostic of some kind.  */
>  extern bool cpp_error (cpp_reader *, enum cpp_diagnostic_level,
>  		       const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_3;
> +  ATTRIBUTE_CPP_PPDIAG (3, 4);
>  extern bool cpp_warning (cpp_reader *, enum cpp_warning_reason,
>  			 const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_3;
> +  ATTRIBUTE_CPP_PPDIAG (3, 4);
>  extern bool cpp_pedwarning (cpp_reader *, enum cpp_warning_reason,
>  			    const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_3;
> +  ATTRIBUTE_CPP_PPDIAG (3, 4);
>  extern bool cpp_warning_syshdr (cpp_reader *, enum cpp_warning_reason reason,
>  				const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_3;
> +  ATTRIBUTE_CPP_PPDIAG (3, 4);
>  
>  /* As their counterparts above, but use RICHLOC.  */
>  extern bool cpp_warning_at (cpp_reader *, enum cpp_warning_reason,
>  			    rich_location *richloc, const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_4;
> +  ATTRIBUTE_CPP_PPDIAG (4, 5);
>  extern bool cpp_pedwarning_at (cpp_reader *, enum cpp_warning_reason,
>  			       rich_location *richloc, const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_4;
> +  ATTRIBUTE_CPP_PPDIAG (4, 5);
>  
>  /* Output a diagnostic with "MSGID: " preceding the
>     error string of errno.  No location is printed.  */
> @@ -1385,27 +1393,27 @@ extern bool cpp_errno_filename (cpp_read
>  extern bool cpp_error_with_line (cpp_reader *, enum cpp_diagnostic_level,
>  				 location_t, unsigned,
>  				 const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_5;
> +  ATTRIBUTE_CPP_PPDIAG (5, 6);
>  extern bool cpp_warning_with_line (cpp_reader *, enum cpp_warning_reason,
>  				   location_t, unsigned,
>  				   const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_5;
> +  ATTRIBUTE_CPP_PPDIAG (5, 6);
>  extern bool cpp_pedwarning_with_line (cpp_reader *, enum cpp_warning_reason,
>  				      location_t, unsigned,
>  				      const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_5;
> +  ATTRIBUTE_CPP_PPDIAG (5, 6);
>  extern bool cpp_warning_with_line_syshdr (cpp_reader *, enum cpp_warning_reason,
>  					  location_t, unsigned,
>  					  const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_5;
> +  ATTRIBUTE_CPP_PPDIAG (5, 6);
>  
>  extern bool cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level,
>  			  location_t src_loc, const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_4;
> +  ATTRIBUTE_CPP_PPDIAG (4, 5);
>  
>  extern bool cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level,
>  			  rich_location *richloc, const char *msgid, ...)
> -  ATTRIBUTE_PRINTF_4;
> +  ATTRIBUTE_CPP_PPDIAG (4, 5);
>  
>  /* In lex.cc */
>  extern int cpp_ideq (const cpp_token *, const char *);
> --- libcpp/Makefile.in.jj	2024-06-03 20:17:52.323099467 +0200
> +++ libcpp/Makefile.in	2024-09-12 23:13:32.244876213 +0200
> @@ -263,7 +263,7 @@ po/$(PACKAGE).pot: $(libcpp_a_SOURCES)
>  	  --keyword=SYNTAX_ERROR --keyword=SYNTAX_ERROR2 \
>  	  --copyright-holder="Free Software Foundation, Inc." \
>  	  --msgid-bugs-address="https://gcc.gnu.org/bugs/" \
> -	  --language=c -o po/$(PACKAGE).pot.tmp $^
> +	  --language=GCC-source -o po/$(PACKAGE).pot.tmp $^
>  	sed 's:$(srcdir)/::g' <po/$(PACKAGE).pot.tmp >po/$(PACKAGE).pot
>  	rm po/$(PACKAGE).pot.tmp
>  
> --- libcpp/errors.cc.jj	2024-01-03 22:33:38.347691673 +0100
> +++ libcpp/errors.cc	2024-09-12 23:13:32.246876185 +0200
> @@ -54,7 +54,7 @@ cpp_diagnostic_get_current_location (cpp
>  
>  /* Print a diagnostic at the given location.  */
>  
> -ATTRIBUTE_FPTR_PRINTF(5,0)
> +ATTRIBUTE_CPP_PPDIAG (5, 0)
>  static bool
>  cpp_diagnostic_at (cpp_reader * pfile, enum cpp_diagnostic_level level,
>  		   enum cpp_warning_reason reason, rich_location *richloc,
> @@ -71,7 +71,7 @@ cpp_diagnostic_at (cpp_reader * pfile, e
>  
>  /* Print a diagnostic at the location of the previously lexed token.  */
>  
> -ATTRIBUTE_FPTR_PRINTF(4,0)
> +ATTRIBUTE_CPP_PPDIAG (4, 0)
>  static bool
>  cpp_diagnostic (cpp_reader * pfile, enum cpp_diagnostic_level level,
>  		enum cpp_warning_reason reason,
> @@ -190,7 +190,7 @@ cpp_pedwarning_at (cpp_reader * pfile, e
>  
>  /* Print a diagnostic at a specific location.  */
>  
> -ATTRIBUTE_FPTR_PRINTF(6,0)
> +ATTRIBUTE_CPP_PPDIAG (6, 0)
>  static bool
>  cpp_diagnostic_with_line (cpp_reader * pfile, enum cpp_diagnostic_level level,
>  			  enum cpp_warning_reason reason,
> --- libcpp/charset.cc.jj	2024-09-12 23:12:54.042423959 +0200
> +++ libcpp/charset.cc	2024-09-12 23:13:32.241876256 +0200
> @@ -867,8 +867,8 @@ cpp_host_to_exec_charset (cpp_reader *pf
>    if (c > LAST_POSSIBLY_BASIC_SOURCE_CHAR)
>      {
>        cpp_error (pfile, CPP_DL_ICE,
> -		 "character 0x%lx is not in the basic source character set\n",
> -		 (unsigned long)c);
> +		 "character 0x%lx is not in the basic source character set",
> +		 (unsigned long) c);
>        return 0;
>      }
>  
> @@ -1550,10 +1550,10 @@ _cpp_valid_ucn (cpp_reader *pfile, const
>    else if (CPP_OPTION (pfile, cpp_warn_c90_c99_compat) > 0
>  	   && !CPP_OPTION (pfile, cplusplus))
>      cpp_error (pfile, CPP_DL_WARNING,
> -	       "C99's universal character names are incompatible with C90");
> +	       "C99%'s universal character names are incompatible with C90");
>    else if (CPP_WTRADITIONAL (pfile) && identifier_pos == 0)
>      cpp_warning (pfile, CPP_W_TRADITIONAL,
> -	         "the meaning of '\\%c' is different in traditional C",
> +	         "the meaning of %<\\%c%> is different in traditional C",
>  	         (int) str[-1]);
>  
>    result = 0;
> @@ -1592,7 +1592,7 @@ _cpp_valid_ucn (cpp_reader *pfile, const
>  	      *cp = 0;
>  	      return false;
>  	    }
> -	  cpp_error (pfile, CPP_DL_ERROR, "'\\N' not followed by '{'");
> +	  cpp_error (pfile, CPP_DL_ERROR, "%<\\N%> not followed by %<{%>");
>  	}
>        else
>  	{
> @@ -1656,13 +1656,13 @@ _cpp_valid_ucn (cpp_reader *pfile, const
>  			  && (!CPP_OPTION (pfile, delimited_escape_seqs)
>  			      || !strict))
>  			ret = cpp_warning (pfile, CPP_W_UNICODE,
> -					   "\\N{%.*s} is not a valid "
> +					   "%<\\N{%.*s}%> is not a valid "
>  					   "universal character; treating it "
>  					   "as separate tokens",
>  					   (int) (str - name), name);
>  		      else
>  			cpp_error (pfile, CPP_DL_ERROR,
> -				   "\\N{%.*s} is not a valid universal "
> +				   "%<\\N{%.*s}%> is not a valid universal "
>  				   "character", (int) (str - name), name);
>  
>  		      /* Try to do a loose name lookup according to
> @@ -1672,7 +1672,7 @@ _cpp_valid_ucn (cpp_reader *pfile, const
>  						       str - name, canon_name);
>  		      if (result != (cppchar_t) -1 && ret)
>  			cpp_error (pfile, CPP_DL_NOTE,
> -				   "did you mean \\N{%s}?", canon_name);
> +				   "did you mean %<\\N{%s}%>?", canon_name);
>  		      else
>  			result = 0xC0;
>  		      if (identifier_pos
> @@ -1690,7 +1690,7 @@ _cpp_valid_ucn (cpp_reader *pfile, const
>  	  else if (identifier_pos)
>  	    {
>  	      cpp_warning (pfile, CPP_W_UNICODE,
> -			   "'\\N{' not terminated with '}' after %.*s; "
> +			   "%<\\N{%> not terminated with %<}%> after %.*s; "
>  			   "treating it as separate tokens",
>  			   (int) (str - base), base);
>  	      *cp = 0;
> @@ -1699,7 +1699,7 @@ _cpp_valid_ucn (cpp_reader *pfile, const
>  	  else
>  	    {
>  	      cpp_error (pfile, CPP_DL_ERROR,
> -			 "'\\N{' not terminated with '}' after %.*s",
> +			 "%<\\N{%> not terminated with %<}%> after %.*s",
>  			 (int) (str - base), base);
>  	      result = 1;
>  	    }
> @@ -1707,7 +1707,7 @@ _cpp_valid_ucn (cpp_reader *pfile, const
>      }
>    else
>      {
> -      cpp_error (pfile, CPP_DL_ICE, "In _cpp_valid_ucn but not a UCN");
> +      cpp_error (pfile, CPP_DL_ICE, "in %<_cpp_valid_ucn%> but not a UCN");
>        length = 4;
>      }
>  
> @@ -1775,7 +1775,7 @@ _cpp_valid_ucn (cpp_reader *pfile, const
>      {
>        if (delimited)
>  	cpp_warning (pfile, CPP_W_UNICODE,
> -		     "'\\u{' not terminated with '}' after %.*s; "
> +		     "%<\\u{%> not terminated with %<}%> after %.*s; "
>  		     "treating it as separate tokens",
>  		     (int) (str - base), base);
>        *cp = 0;
> @@ -1791,7 +1791,7 @@ _cpp_valid_ucn (cpp_reader *pfile, const
>  		   (int) (str - base), base);
>        else
>  	cpp_error (pfile, CPP_DL_ERROR,
> -		   "'\\u{' not terminated with '}' after %.*s",
> +		   "%<\\u{%> not terminated with %<}%> after %.*s",
>  		   (int) (str - base), base);
>        result = 1;
>      }
> @@ -1821,7 +1821,7 @@ _cpp_valid_ucn (cpp_reader *pfile, const
>        if (CPP_OPTION (pfile, warn_dollars) && !pfile->state.skipping)
>  	{
>  	  CPP_OPTION (pfile, warn_dollars) = 0;
> -	  cpp_error (pfile, CPP_DL_PEDWARN, "'$' in identifier or number");
> +	  cpp_error (pfile, CPP_DL_PEDWARN, "%<$%> in identifier or number");
>  	}
>        NORMALIZE_STATE_UPDATE_IDNUM (nst, result);
>      }
> @@ -2096,7 +2096,7 @@ convert_hex (cpp_reader *pfile, const uc
>  
>    if (CPP_WTRADITIONAL (pfile))
>      cpp_warning (pfile, CPP_W_TRADITIONAL,
> -	         "the meaning of '\\x' is different in traditional C");
> +	         "the meaning of %<\\x%> is different in traditional C");
>  
>    /* Skip 'x'.  */
>    from++;
> @@ -2144,13 +2144,13 @@ convert_hex (cpp_reader *pfile, const uc
>    if (!digits_found)
>      {
>        cpp_error (pfile, CPP_DL_ERROR,
> -		 "\\x used with no following hex digits");
> +		 "%<\\x%> used with no following hex digits");
>        return from;
>      }
>    else if (delimited)
>      {
>        cpp_error (pfile, CPP_DL_ERROR,
> -		 "'\\x{' not terminated with '}' after %.*s",
> +		 "%<\\x{%> not terminated with %<}%> after %.*s",
>  		 (int) (from - base), base);
>        return from;
>      }
> @@ -2201,7 +2201,7 @@ convert_oct (cpp_reader *pfile, const uc
>        from++;
>        extend_char_range (&char_range, loc_reader);
>        if (from == limit || *from != '{')
> -	cpp_error (pfile, CPP_DL_ERROR, "'\\o' not followed by '{'");
> +	cpp_error (pfile, CPP_DL_ERROR, "%<\\o%> not followed by %<}%>");
>        else
>  	{
>  	  from++;
> @@ -2247,7 +2247,7 @@ convert_oct (cpp_reader *pfile, const uc
>        else
>  	{
>  	  cpp_error (pfile, CPP_DL_ERROR,
> -		     "'\\o{' not terminated with '}' after %.*s",
> +		     "%<\\o{%> not terminated with %<}%> after %.*s",
>  		     (int) (from - base), base);
>  	  return from;
>  	}
> @@ -2309,7 +2309,7 @@ convert_escape (cpp_reader *pfile, const
>        if (uneval)
>  	cpp_pedwarning (pfile, CPP_W_PEDANTIC,
>  			"numeric escape sequence in unevaluated string: "
> -			"'\\%c'", (int) c);
> +			"%<\\%c%>", (int) c);
>        return convert_hex (pfile, from, limit, tbuf, cvt,
>  			  char_range, loc_reader, ranges);
>  
> @@ -2319,7 +2319,7 @@ convert_escape (cpp_reader *pfile, const
>        if (uneval)
>  	cpp_pedwarning (pfile, CPP_W_PEDANTIC,
>  			"numeric escape sequence in unevaluated string: "
> -			"'\\%c'", (int) c);
> +			"%<\\%c%>", (int) c);
>        return convert_oct (pfile, from, limit, tbuf, cvt,
>  			  char_range, loc_reader, ranges);
>  
> @@ -2346,13 +2346,13 @@ convert_escape (cpp_reader *pfile, const
>      case 'a':
>        if (CPP_WTRADITIONAL (pfile))
>  	cpp_warning (pfile, CPP_W_TRADITIONAL,
> -		     "the meaning of '\\a' is different in traditional C");
> +		     "the meaning of %<\\a%> is different in traditional C");
>        c = charconsts[0];
>        break;
>  
>      case 'e': case 'E':
>        cpp_pedwarning (pfile, CPP_W_PEDANTIC,
> -		      "non-ISO-standard escape sequence, '\\%c'", (int) c);
> +		      "non-ISO-standard escape sequence, %<\\%c%>", (int) c);
>        c = charconsts[2];
>        break;
>  
> @@ -2360,7 +2360,7 @@ convert_escape (cpp_reader *pfile, const
>      unknown:
>        if (ISGRAPH (c))
>  	cpp_error (pfile, CPP_DL_PEDWARN,
> -		   "unknown escape sequence: '\\%c'", (int) c);
> +		   "unknown escape sequence: %<\\%c%>", (int) c);
>        else
>  	{
>  	  encoding_rich_location rich_loc (pfile);
> @@ -2370,7 +2370,7 @@ convert_escape (cpp_reader *pfile, const
>  	  char buf[32];
>  	  sprintf(buf, "%03o", (int) c);
>  	  cpp_error_at (pfile, CPP_DL_PEDWARN, &rich_loc,
> -			"unknown escape sequence: '\\%s'", buf);
> +			"unknown escape sequence: %<\\%s%>", buf);
>  	}
>      }
>  
> @@ -2655,7 +2655,7 @@ cpp_interpret_string_ranges (cpp_reader
>    bool (*saved_diagnostic_handler) (cpp_reader *, enum cpp_diagnostic_level,
>  				    enum cpp_warning_reason, rich_location *,
>  				    const char *, va_list *)
> -    ATTRIBUTE_FPTR_PRINTF(5,0);
> +    ATTRIBUTE_CPP_PPDIAG (5, 0);
>  
>    saved_diagnostic_handler = pfile->cb.diagnostic;
>    pfile->cb.diagnostic = noop_diagnostic_cb;
> @@ -2704,7 +2704,7 @@ count_source_chars (cpp_reader *pfile, c
>    bool (*saved_diagnostic_handler) (cpp_reader *, enum cpp_diagnostic_level,
>  				    enum cpp_warning_reason, rich_location *,
>  				    const char *, va_list *)
> -    ATTRIBUTE_FPTR_PRINTF(5,0);
> +    ATTRIBUTE_CPP_PPDIAG (5, 0);
>    saved_diagnostic_handler = pfile->cb.diagnostic;
>    pfile->cb.diagnostic = noop_diagnostic_cb;
>    convert_f save_func = pfile->narrow_cset_desc.func;
> @@ -2803,7 +2803,7 @@ narrow_str_to_charconst (cpp_reader *pfi
>        if (type != CPP_UTF8CHAR)
>  	cpp_error (pfile, CPP_DL_WARNING,
>  		   "multi-character literal with %ld characters exceeds "
> -		   "'int' size of %ld bytes", (long) i, (long) max_chars);
> +		   "%<int%> size of %ld bytes", (long) i, (long) max_chars);
>        else if (src_chars > 2)
>  	cpp_error (pfile, CPP_DL_ERROR,
>  		   "multi-character literal cannot have an encoding prefix");
> --- libcpp/directives.cc.jj	2024-09-12 23:12:54.042423959 +0200
> +++ libcpp/directives.cc	2024-09-13 10:50:58.586398187 +0200
> @@ -235,7 +235,7 @@ check_eol_1 (cpp_reader *pfile, bool exp
>    if (! SEEN_EOL () && (expand
>  			? cpp_get_token (pfile)
>  			: _cpp_lex_token (pfile))->type != CPP_EOF)
> -    cpp_pedwarning (pfile, reason, "extra tokens at end of #%s directive",
> +    cpp_pedwarning (pfile, reason, "extra tokens at end of %<#%s%> directive",
>  		    pfile->directive->name);
>  }
>  
> @@ -387,8 +387,8 @@ directive_diagnostics (cpp_reader *pfile
>        if (dir->origin == EXTENSION
>  	  && !(dir == &dtable[T_IMPORT] && CPP_OPTION (pfile, objc)))
>  	warned
> -	  = cpp_pedwarning (pfile, CPP_W_PEDANTIC, "#%s is a GCC extension",
> -			    dir->name);
> +	  = cpp_pedwarning (pfile, CPP_W_PEDANTIC,
> +			    "%<#%s%> is a GCC extension", dir->name);
>        if (!warned && dir == &dtable[T_WARNING])
>  	{
>  	  if (CPP_PEDANTIC (pfile) && !CPP_OPTION (pfile, warning_directive))
> @@ -396,18 +396,18 @@ directive_diagnostics (cpp_reader *pfile
>  	      if (CPP_OPTION (pfile, cplusplus))
>  		warned
>  		  = cpp_pedwarning (pfile, CPP_W_CXX23_EXTENSIONS,
> -				    "#%s before C++23 is a GCC extension",
> +				    "%<#%s%> before C++23 is a GCC extension",
>  				    dir->name);
>  	      else
>  		warned
>  		  = cpp_pedwarning (pfile, CPP_W_PEDANTIC,
> -				    "#%s before C23 is a GCC extension",
> +				    "%<#%s%> before C23 is a GCC extension",
>  				    dir->name);
>  	    }
>  
>  	  if (!warned && CPP_OPTION (pfile, cpp_warn_c11_c23_compat) > 0)
>  	    warned = cpp_warning (pfile, CPP_W_C11_C23_COMPAT,
> -				  "#%s before C23 is a GCC extension",
> +				  "%<#%s%> before C23 is a GCC extension",
>  				  dir->name);
>  	}
>  
> @@ -415,7 +415,7 @@ directive_diagnostics (cpp_reader *pfile
>  	   || (dir == &dtable[T_IMPORT] && !CPP_OPTION (pfile, objc)))
>  	  && !warned)
>  	cpp_warning (pfile, CPP_W_DEPRECATED,
> -                     "#%s is a deprecated GCC extension", dir->name);
> +                     "%<#%s%> is a deprecated GCC extension", dir->name);
>      }
>  
>    /* Traditionally, a directive is ignored unless its # is in
> @@ -428,15 +428,15 @@ directive_diagnostics (cpp_reader *pfile
>      {
>        if (dir == &dtable[T_ELIF])
>  	cpp_warning (pfile, CPP_W_TRADITIONAL,
> -		     "suggest not using #elif in traditional C");
> +		     "suggest not using %<#elif%> in traditional C");
>        else if (indented && dir->origin == KANDR)
>  	cpp_warning (pfile, CPP_W_TRADITIONAL,
> -		     "traditional C ignores #%s with the # indented",
> +		     "traditional C ignores %<#%s%> with the %<#%> indented",
>  		     dir->name);
>        else if (!indented && dir->origin != KANDR)
>  	cpp_warning (pfile, CPP_W_TRADITIONAL,
> -		     "suggest hiding #%s from traditional C with an indented #",
> -		     dir->name);
> +		     "suggest hiding %<#%s%> from traditional C with an "
> +		     "indented %<#%>", dir->name);
>      }
>  }
>  
> @@ -648,17 +648,17 @@ lex_macro_node (cpp_reader *pfile, bool
>        if (is_def_or_undef
>  	  && node == pfile->spec_nodes.n_defined)
>  	cpp_error (pfile, CPP_DL_ERROR,
> -		   "\"%s\" cannot be used as a macro name",
> +		   "%qs cannot be used as a macro name",
>  		   NODE_NAME (node));
>        else if (! (node->flags & NODE_POISONED))
>  	return node;
>      }
>    else if (token->flags & NAMED_OP)
>      cpp_error (pfile, CPP_DL_ERROR,
> -       "\"%s\" cannot be used as a macro name as it is an operator in C++",
> -	       NODE_NAME (token->val.node.node));
> +	       "%qs cannot be used as a macro name as it is an operator "
> +	       "in C++", NODE_NAME (token->val.node.node));
>    else if (token->type == CPP_EOF)
> -    cpp_error (pfile, CPP_DL_ERROR, "no macro name given in #%s directive",
> +    cpp_error (pfile, CPP_DL_ERROR, "no macro name given in %<#%s%> directive",
>  	       pfile->directive->name);
>    else
>      cpp_error (pfile, CPP_DL_ERROR, "macro names must be identifiers");
> @@ -714,11 +714,11 @@ do_undef (cpp_reader *pfile)
>  	{
>  	  if (node->flags & NODE_WARN)
>  	    cpp_error (pfile, CPP_DL_WARNING,
> -		       "undefining \"%s\"", NODE_NAME (node));
> +		       "undefining %qs", NODE_NAME (node));
>  	  else if (cpp_builtin_macro_p (node)
>  		   && CPP_OPTION (pfile, warn_builtin_macro_redefined))
>  	    cpp_warning (pfile, CPP_W_BUILTIN_MACRO_REDEFINED,
> -			 "undefining \"%s\"", NODE_NAME (node));
> +			 "undefining %qs", NODE_NAME (node));
>  
>  	  if (node->value.macro
>  	      && CPP_OPTION (pfile, warn_unused_macros))
> @@ -775,7 +775,8 @@ glue_header_name (cpp_reader *pfile)
>  	break;
>        if (token->type == CPP_EOF)
>  	{
> -	  cpp_error (pfile, CPP_DL_ERROR, "missing terminating > character");
> +	  cpp_error (pfile, CPP_DL_ERROR,
> +		     "missing terminating %<>%> character");
>  	  break;
>  	}
>  
> @@ -831,11 +832,11 @@ parse_include (cpp_reader *pfile, int *p
>        const unsigned char *dir;
>  
>        if (pfile->directive == &dtable[T_PRAGMA])
> -	dir = UC"pragma dependency";
> +	dir = UC"pragma GCC dependency";
>        else
>  	dir = pfile->directive->name;
> -      cpp_error (pfile, CPP_DL_ERROR, "#%s expects \"FILENAME\" or <FILENAME>",
> -		 dir);
> +      cpp_error (pfile, CPP_DL_ERROR,
> +		 "%<#%s%> expects %<\"FILENAME\"%> or %<<FILENAME>%>", dir);
>  
>        return NULL;
>      }
> @@ -890,8 +891,8 @@ do_include_common (cpp_reader *pfile, en
>    if (pfile->line_table->depth >= CPP_OPTION (pfile, max_include_depth))
>      cpp_error (pfile, 
>  	       CPP_DL_ERROR, 
> -	       "#include nested depth %u exceeds maximum of %u"
> -	       " (use -fmax-include-depth=DEPTH to increase the maximum)",
> +	       "%<#include%> nested depth %u exceeds maximum of %u"
> +	       " (use %<-fmax-include-depth=DEPTH%> to increase the maximum)",
>  	       pfile->line_table->depth,
>  	       CPP_OPTION (pfile, max_include_depth));
>    else
> @@ -935,7 +936,7 @@ do_include_next (cpp_reader *pfile)
>    if (_cpp_in_main_source_file (pfile))
>      {
>        cpp_error (pfile, CPP_DL_WARNING,
> -		 "#include_next in primary source file");
> +		 "%<#include_next%> in primary source file");
>        type = IT_INCLUDE;
>      }
>    do_include_common (pfile, type);
> @@ -1090,7 +1091,7 @@ _cpp_parse_embed_params (cpp_reader *pfi
>  	    {
>  	      if (params->has_embed)
>  		{
> -		  cpp_error (pfile, CPP_DL_ERROR, "expected ')'");
> +		  cpp_error (pfile, CPP_DL_ERROR, "expected %<)%>");
>  		  return false;
>  		}
>  	    }
> @@ -1107,8 +1108,9 @@ _cpp_parse_embed_params (cpp_reader *pfi
>  	      if (!params->has_embed)
>  		cpp_error_with_line (pfile, CPP_DL_ERROR,
>  				     params->base64.base_run.base->src_loc, 0,
> -				     "'gnu::base64' parameter conflicts with "
> -				     "'limit' or 'gnu::offset' parameters");
> +				     "%<gnu::base64%> parameter conflicts "
> +				     "with %<limit%> or %<gnu::offset%> "
> +				     "parameters");
>  	    }
>  	  else if (params->base64.count == 0
>  		   && CPP_OPTION (pfile, preprocessed))
> @@ -1116,7 +1118,7 @@ _cpp_parse_embed_params (cpp_reader *pfi
>  	      ret = false;
>  	      if (!params->has_embed)
>  		cpp_error_with_line (pfile, CPP_DL_ERROR, params->loc, 0,
> -				     "'gnu::base64' parameter required in "
> +				     "%<gnu::base64%> parameter required in "
>  				     "preprocessed source");
>  	    }
>  	  return ret;
> @@ -1137,7 +1139,7 @@ _cpp_parse_embed_params (cpp_reader *pfi
>  	  token = _cpp_get_token_no_padding (pfile);
>  	  if (token->type != CPP_COLON)
>  	    {
> -	      cpp_error (pfile, CPP_DL_ERROR, "expected ':'");
> +	      cpp_error (pfile, CPP_DL_ERROR, "expected %<:%>");
>  	      return false;
>  	    }
>  	  token = _cpp_get_token_no_padding (pfile);
> @@ -1225,7 +1227,7 @@ _cpp_parse_embed_params (cpp_reader *pfi
>  	}
>        if (param_kind != (size_t) -1 && token->type != CPP_OPEN_PAREN)
>  	cpp_error_with_line (pfile, CPP_DL_ERROR, loc, 0,
> -			     "expected '('");
> +			     "expected %<(%>");
>        else if (param_kind == EMBED_PARAM_LIMIT
>  	       || param_kind == EMBED_PARAM_GNU_OFFSET)
>  	{
> @@ -1238,7 +1240,7 @@ _cpp_parse_embed_params (cpp_reader *pfi
>  	    {
>  	      if (res > INTTYPE_MAXIMUM (off_t))
>  		cpp_error_with_line (pfile, CPP_DL_ERROR, loc, 0,
> -				     "too large 'gnu::offset' argument");
> +				     "too large %<gnu::offset%> argument");
>  	      else
>  		params->offset = res;
>  	    }
> @@ -1280,7 +1282,7 @@ _cpp_parse_embed_params (cpp_reader *pfi
>  	      while (token->type == CPP_STRING);
>  	      if (token->type != CPP_CLOSE_PAREN)
>  		cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, 0,
> -				     "expected ')'");
> +				     "expected %<)%>");
>  	    }
>  	  else
>  	    {
> @@ -1330,7 +1332,7 @@ do_embed (cpp_reader *pfile)
>    if (CPP_OPTION (pfile, traditional))
>      {
>        cpp_error (pfile, CPP_DL_ERROR, /* FIXME should be DL_SORRY */
> -		 "#embed not supported in traditional C");
> +		 "%<#embed%> not supported in traditional C");
>        skip_rest_of_line (pfile);
>        goto done;
>      }
> @@ -1339,10 +1341,10 @@ do_embed (cpp_reader *pfile)
>      {
>        if (CPP_OPTION (pfile, cplusplus))
>  	cpp_error (pfile, CPP_DL_PEDWARN,
> -		   "#%s is a GCC extension", "embed");
> +		   "%<#%s%> is a GCC extension", "embed");
>        else
>  	cpp_error (pfile, CPP_DL_PEDWARN,
> -		   "#%s before C23 is a GCC extension", "embed");
> +		   "%<#%s%> before C23 is a GCC extension", "embed");
>      }
>  
>    fname = parse_include (pfile, &angle_brackets, NULL, &params.loc);
> @@ -1400,7 +1402,7 @@ read_flag (cpp_reader *pfile, unsigned i
>      }
>  
>    if (token->type != CPP_EOF)
> -    cpp_error (pfile, CPP_DL_ERROR, "invalid flag \"%s\" in line directive",
> +    cpp_error (pfile, CPP_DL_ERROR, "invalid flag %qs in line directive",
>  	       cpp_token_as_text (pfile, token));
>    return 0;
>  }
> @@ -1467,10 +1469,11 @@ do_line (cpp_reader *pfile)
>  		       &new_lineno, &wrapped))
>      {
>        if (token->type == CPP_EOF)
> -	cpp_error (pfile, CPP_DL_ERROR, "unexpected end of file after #line");
> +	cpp_error (pfile, CPP_DL_ERROR,
> +		   "unexpected end of file after %<#line%>");
>        else
>  	cpp_error (pfile, CPP_DL_ERROR,
> -		   "\"%s\" after #line is not a positive integer",
> +		   "%qs after %<#line%> is not a positive integer",
>  		   cpp_token_as_text (pfile, token));
>        return;
>      }
> @@ -1492,7 +1495,7 @@ do_line (cpp_reader *pfile)
>      }
>    else if (token->type != CPP_EOF)
>      {
> -      cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
> +      cpp_error (pfile, CPP_DL_ERROR, "%qs is not a valid filename",
>  		 cpp_token_as_text (pfile, token));
>        return;
>      }
> @@ -1533,7 +1536,7 @@ do_linemarker (cpp_reader *pfile)
>        /* Unlike #line, there does not seem to be a way to get an EOF
>  	 here.  So, it should be safe to always spell the token.  */
>        cpp_error (pfile, CPP_DL_ERROR,
> -		 "\"%s\" after # is not a positive integer",
> +		 "%qs after # is not a positive integer",
>  		 cpp_token_as_text (pfile, token));
>        return;
>      }
> @@ -1573,7 +1576,7 @@ do_linemarker (cpp_reader *pfile)
>      }
>    else if (token->type != CPP_EOF)
>      {
> -      cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
> +      cpp_error (pfile, CPP_DL_ERROR, "%qs is not a valid filename",
>  		 cpp_token_as_text (pfile, token));
>        return;
>      }
> @@ -1600,7 +1603,7 @@ do_linemarker (cpp_reader *pfile)
>        if (!from)
>  	{
>  	  cpp_warning (pfile, CPP_W_NONE,
> -		       "file \"%s\" linemarker ignored due to "
> +		       "file %qs linemarker ignored due to "
>  		       "incorrect nesting", new_file);
>  	  return;
>  	}
> @@ -1769,7 +1772,7 @@ register_pragma_1 (cpp_reader *pfile, co
>        else if (entry->allow_expansion != allow_name_expansion)
>  	{
>  	  cpp_error (pfile, CPP_DL_ICE,
> -		     "registering pragmas in namespace \"%s\" with mismatched "
> +		     "registering pragmas in namespace %qs with mismatched "
>  		     "name expansion", space);
>  	  return NULL;
>  	}
> @@ -1778,7 +1781,7 @@ register_pragma_1 (cpp_reader *pfile, co
>    else if (allow_name_expansion)
>      {
>        cpp_error (pfile, CPP_DL_ICE,
> -		 "registering pragma \"%s\" with name expansion "
> +		 "registering pragma %qs with name expansion "
>  		 "and no namespace", name);
>        return NULL;
>      }
> @@ -1796,13 +1799,14 @@ register_pragma_1 (cpp_reader *pfile, co
>    if (entry->is_nspace)
>      clash:
>      cpp_error (pfile, CPP_DL_ICE,
> -	       "registering \"%s\" as both a pragma and a pragma namespace",
> +	       "registering %qs as both a pragma and a pragma namespace",
>  	       NODE_NAME (node));
>    else if (space)
> -    cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered",
> +    cpp_error (pfile, CPP_DL_ICE, "%<#pragma %s %s%> is already registered",
>  	       space, name);
>    else
> -    cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name);
> +    cpp_error (pfile, CPP_DL_ICE, "%<#pragma %s%> is already registered",
> +	       name);
>  
>    return NULL;
>  }
> @@ -2049,7 +2053,7 @@ static void
>  do_pragma_once (cpp_reader *pfile)
>  {
>    if (_cpp_in_main_source_file (pfile))
> -    cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
> +    cpp_error (pfile, CPP_DL_WARNING, "%<#pragma once%> in main file");
>  
>    check_eol (pfile, false);
>    _cpp_mark_file_once_only (pfile, pfile->buffer->file);
> @@ -2072,7 +2076,7 @@ do_pragma_push_macro (cpp_reader *pfile)
>      {
>        location_t src_loc = pfile->cur_token[-1].src_loc;
>        cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
> -		 "invalid #pragma push_macro directive");
> +			   "invalid %<#pragma push_macro%> directive");
>        check_eol (pfile, false);
>        skip_rest_of_line (pfile);
>        return;
> @@ -2129,7 +2133,7 @@ do_pragma_pop_macro (cpp_reader *pfile)
>      {
>        location_t src_loc = pfile->cur_token[-1].src_loc;
>        cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
> -		 "invalid #pragma pop_macro directive");
> +			   "invalid %<#pragma pop_macro%> directive");
>        check_eol (pfile, false);
>        skip_rest_of_line (pfile);
>        return;
> @@ -2184,7 +2188,7 @@ do_pragma_poison (cpp_reader *pfile)
>        if (tok->type != CPP_NAME)
>  	{
>  	  cpp_error (pfile, CPP_DL_ERROR,
> -		     "invalid #pragma GCC poison directive");
> +		     "invalid %<#pragma GCC poison%> directive");
>  	  break;
>  	}
>  
> @@ -2193,7 +2197,7 @@ do_pragma_poison (cpp_reader *pfile)
>  	continue;
>  
>        if (cpp_macro_p (hp))
> -	cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"",
> +	cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro %qs",
>  		   NODE_NAME (hp));
>        _cpp_free_definition (hp);
>        hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
> @@ -2215,7 +2219,7 @@ do_pragma_system_header (cpp_reader *pfi
>  {
>    if (_cpp_in_main_source_file (pfile))
>      cpp_error (pfile, CPP_DL_WARNING,
> -	       "#pragma system_header ignored outside include file");
> +	       "%<#pragma system_header%> ignored outside include file");
>    else
>      {
>        check_eol (pfile, false);
> @@ -2268,7 +2272,7 @@ do_pragma_warning_or_error (cpp_reader *
>  					    CPP_STRING)
>        || str.len == 0)
>      {
> -      cpp_error (pfile, CPP_DL_ERROR, "invalid \"#pragma GCC %s\" directive",
> +      cpp_error (pfile, CPP_DL_ERROR, "invalid %<#pragma GCC %s%> directive",
>  		 error ? "error" : "warning");
>        return;
>      }
> @@ -2476,7 +2480,7 @@ _cpp_do__Pragma (cpp_reader *pfile, loca
>        return 1;
>      }
>    cpp_error (pfile, CPP_DL_ERROR,
> -	     "_Pragma takes a parenthesized string literal");
> +	     "%<_Pragma%> takes a parenthesized string literal");
>    return 0;
>  }
>  
> @@ -2559,12 +2563,12 @@ do_else (cpp_reader *pfile)
>    struct if_stack *ifs = buffer->if_stack;
>  
>    if (ifs == NULL)
> -    cpp_error (pfile, CPP_DL_ERROR, "#else without #if");
> +    cpp_error (pfile, CPP_DL_ERROR, "%<#else%> without %<#if%>");
>    else
>      {
>        if (ifs->type == T_ELSE)
>  	{
> -	  cpp_error (pfile, CPP_DL_ERROR, "#else after #else");
> +	  cpp_error (pfile, CPP_DL_ERROR, "%<#else%> after %<#else%>");
>  	  cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
>  			       "the conditional began here");
>  	}
> @@ -2592,12 +2596,13 @@ do_elif (cpp_reader *pfile)
>    struct if_stack *ifs = buffer->if_stack;
>  
>    if (ifs == NULL)
> -    cpp_error (pfile, CPP_DL_ERROR, "#%s without #if", pfile->directive->name);
> +    cpp_error (pfile, CPP_DL_ERROR, "%<#%s%> without %<#if%>",
> +	       pfile->directive->name);
>    else
>      {
>        if (ifs->type == T_ELSE)
>  	{
> -	  cpp_error (pfile, CPP_DL_ERROR, "#%s after #else",
> +	  cpp_error (pfile, CPP_DL_ERROR, "%<#%s%> after %<#else%>",
>  		     pfile->directive->name);
>  	  cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
>  			       "the conditional began here");
> @@ -2620,11 +2625,11 @@ do_elif (cpp_reader *pfile)
>  	    {
>  	      if (CPP_OPTION (pfile, cplusplus))
>  		cpp_pedwarning (pfile, CPP_W_CXX23_EXTENSIONS,
> -				"#%s before C++23 is a GCC extension",
> +				"%<#%s%> before C++23 is a GCC extension",
>  				pfile->directive->name);
>  	      else
>  		cpp_pedwarning (pfile, CPP_W_PEDANTIC,
> -				"#%s before C23 is a GCC extension",
> +				"%<#%s%> before C23 is a GCC extension",
>  				pfile->directive->name);
>  	    }
>  	  pfile->state.skipping = 1;
> @@ -2659,11 +2664,13 @@ do_elif (cpp_reader *pfile)
>  		    {
>  		      if (CPP_OPTION (pfile, cplusplus))
>  			cpp_pedwarning (pfile, CPP_W_CXX23_EXTENSIONS,
> -					"#%s before C++23 is a GCC extension",
> +					"%<#%s%> before C++23 is a GCC "
> +					"extension",
>  					pfile->directive->name);
>  		      else
>  			cpp_pedwarning (pfile, CPP_W_PEDANTIC,
> -					"#%s before C23 is a GCC extension",
> +					"%<#%s%> before C23 is a GCC "
> +					"extension",
>  					pfile->directive->name);
>  		    }
>  		  pfile->state.skipping = skip;
> @@ -2699,7 +2706,7 @@ do_endif (cpp_reader *pfile)
>    struct if_stack *ifs = buffer->if_stack;
>  
>    if (ifs == NULL)
> -    cpp_error (pfile, CPP_DL_ERROR, "#endif without #if");
> +    cpp_error (pfile, CPP_DL_ERROR, "%<#endif%> without %<#if%>");
>    else
>      {
>        /* Only check EOL if was not originally skipping.  */
> @@ -2775,7 +2782,7 @@ parse_answer (cpp_reader *pfile, int typ
>  	return true;
>  
>        cpp_error_with_line (pfile, CPP_DL_ERROR, pred_loc, 0,
> -			   "missing '(' after predicate");
> +			   "missing %<(%> after predicate");
>        return false;
>      }
>  
> @@ -2793,7 +2800,7 @@ parse_answer (cpp_reader *pfile, int typ
>  
>        if (token->type == CPP_EOF)
>  	{
> -	  cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer");
> +	  cpp_error (pfile, CPP_DL_ERROR, "missing %<)%> to complete answer");
>  	  return false;
>  	}
>  
> @@ -2805,7 +2812,7 @@ parse_answer (cpp_reader *pfile, int typ
>  
>    if (!count)
>      {
> -      cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty");
> +      cpp_error (pfile, CPP_DL_ERROR, "predicate%'s answer is empty");
>        return false;
>      }
>  
> @@ -2920,7 +2927,7 @@ do_assert (cpp_reader *pfile)
>           is not a duplicate.  */
>        if (*find_answer (node, answer))
>  	{
> -	  cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted",
> +	  cpp_error (pfile, CPP_DL_WARNING, "%qs re-asserted",
>  		     NODE_NAME (node) + 1);
>  	  return;
>  	}
> @@ -3003,10 +3010,10 @@ cpp_define (cpp_reader *pfile, const cha
>  void
>  cpp_define_unused (cpp_reader *pfile, const char *str)
>  {
> -    unsigned char warn_unused_macros = CPP_OPTION (pfile, warn_unused_macros);
> -    CPP_OPTION (pfile, warn_unused_macros) = 0;
> -    cpp_define (pfile, str);
> -    CPP_OPTION (pfile, warn_unused_macros) = warn_unused_macros;
> +  unsigned char warn_unused_macros = CPP_OPTION (pfile, warn_unused_macros);
> +  CPP_OPTION (pfile, warn_unused_macros) = 0;
> +  cpp_define (pfile, str);
> +  CPP_OPTION (pfile, warn_unused_macros) = warn_unused_macros;
>  }
>  
>  /* Use to build macros to be run through cpp_define() as
> --- libcpp/expr.cc.jj	2024-09-12 23:12:54.043423944 +0200
> +++ libcpp/expr.cc	2024-09-13 09:52:31.719800975 +0200
> @@ -678,10 +678,12 @@ cpp_classify_number (cpp_reader *pfile,
>      {
>        if (radix == 2)
>  	SYNTAX_ERROR2_AT (virtual_location,
> -			  "invalid digit \"%c\" in binary constant", '0' + max_digit);
> +			  "invalid digit %<%c%> in binary constant",
> +			  '0' + max_digit);
>        else
>  	SYNTAX_ERROR2_AT (virtual_location,
> -			  "invalid digit \"%c\" in octal constant", '0' + max_digit);
> +			  "invalid digit %<%c%> in octal constant",
> +			  '0' + max_digit);
>      }
>  
>    if (float_flag != NOT_FLOAT)
> @@ -689,7 +691,7 @@ cpp_classify_number (cpp_reader *pfile,
>        if (radix == 2)
>  	{
>  	  cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
> -			       "invalid prefix \"0b\" for floating constant");
> +			       "invalid prefix %<0b%> for floating constant");
>  	  return CPP_N_INVALID;
>  	}
>  
> @@ -751,8 +753,8 @@ cpp_classify_number (cpp_reader *pfile,
>  	  else
>  	    {
>  	      cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
> -				   "invalid suffix \"%.*s\" on floating constant",
> -				   (int) (limit - str), str);
> +				   "invalid suffix %<%.*s%> on floating "
> +				   "constant", (int) (limit - str), str);
>  	      return CPP_N_INVALID;
>  	    }
>  	}
> @@ -762,7 +764,7 @@ cpp_classify_number (cpp_reader *pfile,
>  	  && CPP_WTRADITIONAL (pfile)
>  	  && ! cpp_sys_macro_p (pfile))
>  	cpp_warning_with_line (pfile, CPP_W_TRADITIONAL, virtual_location, 0,
> -			       "traditional C rejects the \"%.*s\" suffix",
> +			       "traditional C rejects the %<%.*s%> suffix",
>  			       (int) (limit - str), str);
>  
>        /* A suffix for double is a GCC extension via decimal float support.
> @@ -777,8 +779,8 @@ cpp_classify_number (cpp_reader *pfile,
>        if ((result & CPP_N_DFLOAT) && radix != 10)
>          {
>            cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
> -			       "invalid suffix \"%.*s\" with hexadecimal floating constant",
> -			       (int) (limit - str), str);
> +			       "invalid suffix %<%.*s%> with hexadecimal "
> +			       "floating constant", (int) (limit - str), str);
>            return CPP_N_INVALID;
>          }
>  
> @@ -791,11 +793,12 @@ cpp_classify_number (cpp_reader *pfile,
>  	  if (!CPP_OPTION (pfile, dfp_constants))
>  	    cpp_pedwarning_with_line
>  	      (pfile, CPP_W_PEDANTIC, virtual_location, 0,
> -	       "decimal float constants are a C23 feature");
> +	       "decimal floating constants are a C23 feature");
>  	  else if (CPP_OPTION (pfile, cpp_warn_c11_c23_compat) > 0)
>  	    cpp_warning_with_line (pfile, CPP_W_C11_C23_COMPAT,
>  				   virtual_location, 0,
> -				   "decimal float constants are a C23 feature");
> +				   "decimal floating constants are a C23 "
> +				   "feature");
>  	}
>  
>        result |= CPP_N_FLOATING;
> @@ -814,8 +817,8 @@ cpp_classify_number (cpp_reader *pfile,
>  	  else
>  	    {
>  	      cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
> -				   "invalid suffix \"%.*s\" on integer constant",
> -				   (int) (limit - str), str);
> +				   "invalid suffix %<%.*s%> on integer "
> +				   "constant", (int) (limit - str), str);
>  	      return CPP_N_INVALID;
>  	    }
>  	}
> @@ -831,7 +834,7 @@ cpp_classify_number (cpp_reader *pfile,
>  	  if (u_or_i || large)
>  	    cpp_warning_with_line (pfile, large ? CPP_W_LONG_LONG : CPP_W_TRADITIONAL,
>  				   virtual_location, 0,
> -				   "traditional C rejects the \"%.*s\" suffix",
> +				   "traditional C rejects the %<%.*s%> suffix",
>  				   (int) (limit - str), str);
>  	}
>  
> @@ -853,9 +856,10 @@ cpp_classify_number (cpp_reader *pfile,
>        if ((result & CPP_N_SIZE_T) == CPP_N_SIZE_T
>  	  && !CPP_OPTION (pfile, size_t_literals))
>         {
> -	  const char *message = (result & CPP_N_UNSIGNED) == CPP_N_UNSIGNED
> -				? N_("use of C++23 %<size_t%> integer constant")
> -				: N_("use of C++23 %<make_signed_t<size_t>%> integer constant");
> +	  const char *message
> +	    = (result & CPP_N_UNSIGNED) == CPP_N_UNSIGNED
> +	      ? N_("use of C++23 %<size_t%> integer constant")
> +	      : N_("use of C++23 %<make_signed_t<size_t>%> integer constant");
>  	  cpp_warning_with_line (pfile, CPP_W_SIZE_T_LITERALS,
>  				 virtual_location, 0, message);
>         }
> @@ -1118,7 +1122,7 @@ parse_defined (cpp_reader *pfile)
>    cpp_context *initial_context = pfile->context;
>  
>    if (pfile->state.in_directive == 3)
> -    cpp_error (pfile, CPP_DL_ERROR, "'defined' in #embed parameter");
> +    cpp_error (pfile, CPP_DL_ERROR, "%<defined%> in %<#embed%> parameter");
>  
>    /* Don't expand macros.  */
>    pfile->state.prevent_expansion++;
> @@ -1135,14 +1139,14 @@ parse_defined (cpp_reader *pfile)
>        node = token->val.node.node;
>        if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
>  	{
> -	  cpp_error (pfile, CPP_DL_ERROR, "missing ')' after \"defined\"");
> +	  cpp_error (pfile, CPP_DL_ERROR, "missing %<)%> after %<defined%>");
>  	  node = 0;
>  	}
>      }
>    else
>      {
>        cpp_error (pfile, CPP_DL_ERROR,
> -		 "operator \"defined\" requires an identifier");
> +		 "operator %<defined%> requires an identifier");
>        if (token->flags & NAMED_OP)
>  	{
>  	  cpp_token op;
> @@ -1150,7 +1154,7 @@ parse_defined (cpp_reader *pfile)
>  	  op.flags = 0;
>  	  op.type = token->type;
>  	  cpp_error (pfile, CPP_DL_ERROR,
> -		     "(\"%s\" is an alternative token for \"%s\" in C++)",
> +		     "(%qs is an alternative token for %qs in C++)",
>  		     cpp_token_as_text (pfile, token),
>  		     cpp_token_as_text (pfile, &op));
>  	}
> @@ -1163,7 +1167,7 @@ parse_defined (cpp_reader *pfile)
>  	   || initial_context != &pfile->base_context)
>  	  && CPP_OPTION (pfile, warn_expansion_to_defined))
>          cpp_pedwarning (pfile, CPP_W_EXPANSION_TO_DEFINED,
> -		        "this use of \"defined\" may not be portable");
> +		        "this use of %<defined%> may not be portable");
>        is_defined = _cpp_defined_macro_p (node);
>        if (!_cpp_maybe_notify_macro_use (pfile, node, token->src_loc))
>  	/* It wasn't a macro after all.  */
> @@ -1268,7 +1272,7 @@ eval_token (cpp_reader *pfile, const cpp
>  	  result.low = 0;
>  	  if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval)
>  	    cpp_warning_with_line (pfile, CPP_W_UNDEF, virtual_location, 0,
> -				   "\"%s\" is not defined, evaluates to 0",
> +				   "%qs is not defined, evaluates to %<0%>",
>  				   NODE_NAME (token->val.node.node));
>  	}
>        break;
> @@ -1431,7 +1435,7 @@ _cpp_parse_expr (cpp_reader *pfile, cons
>  	case CPP_HASH:
>  	  if (!want_value)
>  	    SYNTAX_ERROR2_AT (op.loc,
> -			      "missing binary operator before token \"%s\"",
> +			      "missing binary operator before token %qs",
>  			      cpp_token_as_text (pfile, op.token));
>  	  want_value = false;
>  	  top->value = eval_token (pfile, op.token, op.loc);
> @@ -1456,7 +1460,8 @@ _cpp_parse_expr (cpp_reader *pfile, cons
>  	default:
>  	  if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
>  	    SYNTAX_ERROR2_AT (op.loc,
> -			      "token \"%s\" is not valid in preprocessor expressions",
> +			      "token %qs is not valid in preprocessor "
> +			      "expressions",
>  			      cpp_token_as_text (pfile, op.token));
>  	  break;
>  	}
> @@ -1466,7 +1471,7 @@ _cpp_parse_expr (cpp_reader *pfile, cons
>  	{
>  	  if (!want_value)
>  	    SYNTAX_ERROR2_AT (op.loc,
> -			      "missing binary operator before token \"%s\"",
> +			      "missing binary operator before token %qs",
>  			      cpp_token_as_text (pfile, op.token));
>  	}
>        else if (want_value)
> @@ -1475,7 +1480,7 @@ _cpp_parse_expr (cpp_reader *pfile, cons
>  	     Try to emit a specific diagnostic.  */
>  	  if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN)
>  	    SYNTAX_ERROR_AT (op.loc,
> -			     "missing expression between '(' and ')'");
> +			     "missing expression between %<(%> and %<)%>");
>  
>  	  if (op.op == CPP_EOF && top->op == CPP_EOF)
>   	    SYNTAX_ERROR2_AT (op.loc,
> @@ -1483,13 +1488,13 @@ _cpp_parse_expr (cpp_reader *pfile, cons
>  
>   	  if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
>   	    SYNTAX_ERROR2_AT (op.loc,
> -			      "operator '%s' has no right operand",
> +			      "operator %qs has no right operand",
>  			      cpp_token_as_text (pfile, top->token));
>  	  else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF)
>  	    /* Complain about missing paren during reduction.  */;
>  	  else
>  	    SYNTAX_ERROR2_AT (op.loc,
> -			      "operator '%s' has no left operand",
> +			      "operator %qs has no left operand",
>  			      cpp_token_as_text (pfile, op.token));
>  	}
>  
> @@ -1518,7 +1523,7 @@ _cpp_parse_expr (cpp_reader *pfile, cons
>  	case CPP_COLON:
>  	  if (top->op != CPP_QUERY)
>  	    SYNTAX_ERROR_AT (op.loc,
> -			     " ':' without preceding '?'");
> +			     " %<:%> without preceding %<?%>");
>  	  if (!num_zerop (top[-1].value)) /* Was '?' condition true?  */
>  	    pfile->state.skip_eval++;
>  	  else
> @@ -1687,7 +1692,7 @@ reduce (cpp_reader *pfile, struct op *to
>  	    {
>  	      cpp_error_with_line (pfile, CPP_DL_ERROR, 
>  				   top->token->src_loc,
> -				   0, "missing ')' in expression");
> +				   0, "missing %<)%> in expression");
>  	      return 0;
>  	    }
>  	  top--;
> @@ -1716,7 +1721,7 @@ reduce (cpp_reader *pfile, struct op *to
>  	  /* COMMA and COLON should not reduce a QUERY operator.  */
>  	  if (op == CPP_COMMA || op == CPP_COLON)
>  	    return top;
> -	  cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'");
> +	  cpp_error (pfile, CPP_DL_ERROR, "%<?%> without following %<:%>");
>  	  return 0;
>  
>  	default:
> @@ -1731,7 +1736,7 @@ reduce (cpp_reader *pfile, struct op *to
>  
>    if (op == CPP_CLOSE_PAREN)
>      {
> -      cpp_error (pfile, CPP_DL_ERROR, "missing '(' in expression");
> +      cpp_error (pfile, CPP_DL_ERROR, "missing %<(%> in expression");
>        return 0;
>      }
>  
> @@ -1763,12 +1768,12 @@ check_promotion (cpp_reader *pfile, cons
>      {
>        if (!num_positive (op[-1].value, CPP_OPTION (pfile, precision)))
>  	cpp_error_with_line (pfile, CPP_DL_WARNING, op[-1].loc, 0,
> -			     "the left operand of \"%s\" changes sign when promoted",
> -			     cpp_token_as_text (pfile, op->token));
> +			     "the left operand of %qs changes sign when "
> +			     "promoted", cpp_token_as_text (pfile, op->token));
>      }
>    else if (!num_positive (op->value, CPP_OPTION (pfile, precision)))
>      cpp_error_with_line (pfile, CPP_DL_WARNING, op->loc, 0,
> -	       "the right operand of \"%s\" changes sign when promoted",
> +	       "the right operand of %qs changes sign when promoted",
>  	       cpp_token_as_text (pfile, op->token));
>  }
>  
> --- libcpp/files.cc.jj	2024-09-12 23:13:27.708941247 +0200
> +++ libcpp/files.cc	2024-09-12 23:13:32.245876199 +0200
> @@ -530,7 +530,7 @@ _cpp_find_file (cpp_reader *pfile, const
>  
>    /* Ensure we get no confusion between cached files and directories.  */
>    if (start_dir == NULL)
> -    cpp_error_at (pfile, CPP_DL_ICE, loc, "NULL directory in find_file");
> +    cpp_error_at (pfile, CPP_DL_ICE, loc, "NULL directory in %<find_file%>");
>  
>    void **hash_slot
>      = htab_find_slot_with_hash (pfile->file_hash, fname,
> @@ -607,7 +607,7 @@ _cpp_find_file (cpp_reader *pfile, const
>  			   " but they were invalid");
>  		if (!cpp_get_options (pfile)->warn_invalid_pch)
>  		  cpp_error (pfile, CPP_DL_NOTE,
> -			     "use -Winvalid-pch for more information");
> +			     "use %<-Winvalid-pch%> for more information");
>  	      }
>  
>  	    if (kind == _cpp_FFK_PRE_INCLUDE)
> @@ -1415,7 +1415,8 @@ finish_base64_embed (cpp_reader *pfile,
>      {
>        if (!params->has_embed)
>  	cpp_error_at (pfile, CPP_DL_ERROR, params->loc,
> -		      "'gnu::base64' parameter can be only used with \".\"");
> +		      "%<gnu::base64%> parameter can be only used with "
> +		      "%<\".\"%>");
>        return 0;
>      }
>    tokenrun *cur_run = &params->base64.base_run;
> @@ -1431,7 +1432,7 @@ finish_base64_embed (cpp_reader *pfile,
>  	    {
>  	    fail:
>  	      cpp_error_at (pfile, CPP_DL_ERROR, params->loc,
> -			    "'gnu::base64' argument not valid base64 "
> +			    "%<gnu::base64%> argument not valid base64 "
>  			    "encoded string");
>  	      free (buf);
>  	      return 0;
> --- libcpp/init.cc.jj	2024-09-12 23:12:54.044423930 +0200
> +++ libcpp/init.cc	2024-09-12 23:13:32.243876228 +0200
> @@ -653,7 +653,7 @@ static void sanity_checks (cpp_reader *p
>       type precisions made by cpplib.  */
>    test--;
>    if (test < 1)
> -    cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
> +    cpp_error (pfile, CPP_DL_ICE, "%<cppchar_t%> must be an unsigned type");
>  
>    if (CPP_OPTION (pfile, precision) > max_precision)
>      cpp_error (pfile, CPP_DL_ICE,
> @@ -664,18 +664,19 @@ static void sanity_checks (cpp_reader *p
>  
>    if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
>      cpp_error (pfile, CPP_DL_ICE,
> -	       "CPP arithmetic must be at least as precise as a target int");
> +	       "CPP arithmetic must be at least as precise as a target "
> +	       "%<int%>");
>  
>    if (CPP_OPTION (pfile, char_precision) < 8)
> -    cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
> +    cpp_error (pfile, CPP_DL_ICE, "target %<char%> is less than 8 bits wide");
>  
>    if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
>      cpp_error (pfile, CPP_DL_ICE,
> -	       "target wchar_t is narrower than target char");
> +	       "target %<wchar_t%> is narrower than target %<char%>");
>  
>    if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
>      cpp_error (pfile, CPP_DL_ICE,
> -	       "target int is narrower than target char");
> +	       "target %<int%> is narrower than target %<char%>");
>  
>    /* This is assumed in eval_token() and could be fixed if necessary.  */
>    if (sizeof (cppchar_t) > sizeof (cpp_num_part))
> --- libcpp/lex.cc.jj	2024-09-12 23:12:54.045423916 +0200
> +++ libcpp/lex.cc	2024-09-12 23:13:32.243876228 +0200
> @@ -1036,7 +1036,7 @@ _cpp_process_line_notes (cpp_reader *pfi
>  	      if (CPP_OPTION (pfile, trigraphs))
>  		cpp_warning_with_line (pfile, CPP_W_TRIGRAPHS,
>                                         pfile->line_table->highest_line, col,
> -				       "trigraph ??%c converted to %c",
> +				       "trigraph %<??%c%> converted to %<%c%>",
>  				       note->type,
>  				       (int) _cpp_trigraph_map[note->type]);
>  	      else
> @@ -1044,7 +1044,7 @@ _cpp_process_line_notes (cpp_reader *pfi
>  		  cpp_warning_with_line 
>  		    (pfile, CPP_W_TRIGRAPHS,
>                       pfile->line_table->highest_line, col,
> -		     "trigraph ??%c ignored, use -trigraphs to enable",
> +		     "trigraph %<??%c%> ignored, use %<-trigraphs%> to enable",
>  		     note->type);
>  		}
>  	    }
> @@ -1577,7 +1577,7 @@ maybe_warn_bidi_on_char (cpp_reader *pfi
>  	      rich_loc.add_range (bidi::current_ctx_loc ());
>  	      cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
>  			      "UTF-8 vs UCN mismatch when closing "
> -			      "a context by \"%s\"", bidi::to_str (kind));
> +			      "a context by %qs", bidi::to_str (kind));
>  	    }
>  	}
>        else if (warn_bidi & bidirectional_any
> @@ -1585,11 +1585,11 @@ maybe_warn_bidi_on_char (cpp_reader *pfi
>  	{
>  	  if (kind == bidi::kind::PDF || kind == bidi::kind::PDI)
>  	    cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
> -			    "\"%s\" is closing an unopened context",
> +			    "%qs is closing an unopened context",
>  			    bidi::to_str (kind));
>  	  else
>  	    cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
> -			    "found problematic Unicode character \"%s\"",
> +			    "found problematic Unicode character %qs",
>  			    bidi::to_str (kind));
>  	}
>      }
> @@ -1619,13 +1619,13 @@ _cpp_warn_invalid_utf8 (cpp_reader *pfil
>  	cpp_error_with_line (pfile, CPP_DL_PEDWARN,
>  			     pfile->line_table->highest_line,
>  			     CPP_BUF_COL (buffer),
> -			     "invalid UTF-8 character <%x>",
> +			     "invalid UTF-8 character %<<%x>%>",
>  			     cur[0]);
>        else
>  	cpp_warning_with_line (pfile, CPP_W_INVALID_UTF8,
>  			       pfile->line_table->highest_line,
>  			       CPP_BUF_COL (buffer),
> -			       "invalid UTF-8 character <%x>",
> +			       "invalid UTF-8 character %<<%x>%>",
>  			       cur[0]);
>        return cur + 1;
>      }
> @@ -1635,13 +1635,13 @@ _cpp_warn_invalid_utf8 (cpp_reader *pfil
>  	cpp_error_with_line (pfile, CPP_DL_PEDWARN,
>  			     pfile->line_table->highest_line,
>  			     CPP_BUF_COL (buffer),
> -			     "invalid UTF-8 character <%x><%x>",
> +			     "invalid UTF-8 character %<<%x><%x>%>",
>  			     cur[0], cur[1]);
>        else
>  	cpp_warning_with_line (pfile, CPP_W_INVALID_UTF8,
>  			       pfile->line_table->highest_line,
>  			       CPP_BUF_COL (buffer),
> -			       "invalid UTF-8 character <%x><%x>",
> +			       "invalid UTF-8 character %<<%x><%x>%>",
>  			       cur[0], cur[1]);
>        return cur + 2;
>      }
> @@ -1651,13 +1651,13 @@ _cpp_warn_invalid_utf8 (cpp_reader *pfil
>  	cpp_error_with_line (pfile, CPP_DL_PEDWARN,
>  			     pfile->line_table->highest_line,
>  			     CPP_BUF_COL (buffer),
> -			     "invalid UTF-8 character <%x><%x><%x>",
> +			     "invalid UTF-8 character %<<%x><%x><%x>%>",
>  			     cur[0], cur[1], cur[2]);
>        else
>  	cpp_warning_with_line (pfile, CPP_W_INVALID_UTF8,
>  			       pfile->line_table->highest_line,
>  			       CPP_BUF_COL (buffer),
> -			       "invalid UTF-8 character <%x><%x><%x>",
> +			       "invalid UTF-8 character %<<%x><%x><%x>%>",
>  			       cur[0], cur[1], cur[2]);
>        return cur + 3;
>      }
> @@ -1667,13 +1667,13 @@ _cpp_warn_invalid_utf8 (cpp_reader *pfil
>  	cpp_error_with_line (pfile, CPP_DL_PEDWARN,
>  			     pfile->line_table->highest_line,
>  			     CPP_BUF_COL (buffer),
> -			     "invalid UTF-8 character <%x><%x><%x><%x>",
> +			     "invalid UTF-8 character %<<%x><%x><%x><%x>%>",
>  			     cur[0], cur[1], cur[2], cur[3]);
>        else
>  	cpp_warning_with_line (pfile, CPP_W_INVALID_UTF8,
>  			       pfile->line_table->highest_line,
>  			       CPP_BUF_COL (buffer),
> -			       "invalid UTF-8 character <%x><%x><%x><%x>",
> +			       "invalid UTF-8 character %<<%x><%x><%x><%x>%>",
>  			       cur[0], cur[1], cur[2], cur[3]);
>        return cur + 4;
>      }
> @@ -1755,7 +1755,7 @@ _cpp_skip_block_comment (cpp_reader *pfi
>  	      cpp_warning_with_line (pfile, CPP_W_COMMENTS,
>  				     pfile->line_table->highest_line,
>  				     CPP_BUF_COL (buffer),
> -				     "\"/*\" within comment");
> +				     "%</*%> within comment");
>  	    }
>  	}
>        else if (c == '\n')
> @@ -1933,13 +1933,13 @@ warn_about_normalization (cpp_reader *pf
>        sz = cpp_spell_token (pfile, token, buf, false) - buf;
>        if (NORMALIZE_STATE_RESULT (s) == normalized_C)
>  	cpp_warning_at (pfile, CPP_W_NORMALIZE, &rich_loc,
> -			"`%.*s' is not in NFKC", (int) sz, buf);
> +			"%<%.*s%> is not in NFKC", (int) sz, buf);
>        else if (identifier && CPP_OPTION (pfile, xid_identifiers))
>  	cpp_pedwarning_at (pfile, CPP_W_NORMALIZE, &rich_loc,
> -				  "`%.*s' is not in NFC", (int) sz, buf);
> +				  "%<%.*s%> is not in NFC", (int) sz, buf);
>        else
>  	cpp_warning_at (pfile, CPP_W_NORMALIZE, &rich_loc,
> -			"`%.*s' is not in NFC", (int) sz, buf);
> +			"%<%.*s%> is not in NFC", (int) sz, buf);
>        free (buf);
>      }
>  }
> @@ -1966,7 +1966,7 @@ forms_identifier_p (cpp_reader *pfile, i
>        if (CPP_OPTION (pfile, warn_dollars) && !pfile->state.skipping)
>  	{
>  	  CPP_OPTION (pfile, warn_dollars) = 0;
> -	  cpp_error (pfile, CPP_DL_PEDWARN, "'$' in identifier or number");
> +	  cpp_error (pfile, CPP_DL_PEDWARN, "%<$%> in identifier or number");
>  	}
>  
>        return true;
> @@ -2028,10 +2028,10 @@ maybe_va_opt_error (cpp_reader *pfile)
>  	{
>  	  if (CPP_OPTION (pfile, cplusplus))
>  	    cpp_pedwarning (pfile, CPP_W_CXX20_EXTENSIONS,
> -			    "__VA_OPT__ is not available until C++20");
> +			    "%<__VA_OPT__%> is not available until C++20");
>  	  else
>  	    cpp_pedwarning (pfile, CPP_W_PEDANTIC,
> -			    "__VA_OPT__ is not available until C23");
> +			    "%<__VA_OPT__%> is not available until C23");
>  	}
>      }
>    else if (!pfile->state.va_args_ok)
> @@ -2039,7 +2039,7 @@ maybe_va_opt_error (cpp_reader *pfile)
>        /* __VA_OPT__ should only appear in the replacement list of a
>  	 variadic macro.  */
>        cpp_error (pfile, CPP_DL_PEDWARN,
> -		 "__VA_OPT__ can only appear in the expansion"
> +		 "%<__VA_OPT__%> can only appear in the expansion"
>  		 " of a C++20 variadic macro");
>      }
>  }
> @@ -2056,7 +2056,7 @@ identifier_diagnostics_on_lex (cpp_reade
>    /* It is allowed to poison the same identifier twice.  */
>    if ((node->flags & NODE_POISONED) && !pfile->state.poisoned_ok)
>      {
> -      cpp_error (pfile, CPP_DL_ERROR, "attempt to use poisoned \"%s\"",
> +      cpp_error (pfile, CPP_DL_ERROR, "attempt to use poisoned %qs",
>  		 NODE_NAME (node));
>        const auto data = (cpp_hashnode_extra *)
>  	ht_lookup (pfile->extra_hash_table, node->ident, HT_NO_INSERT);
> @@ -2071,11 +2071,11 @@ identifier_diagnostics_on_lex (cpp_reade
>      {
>        if (CPP_OPTION (pfile, cplusplus))
>  	cpp_error (pfile, CPP_DL_PEDWARN,
> -		   "__VA_ARGS__ can only appear in the expansion"
> +		   "%<__VA_ARGS__%> can only appear in the expansion"
>  		   " of a C++11 variadic macro");
>        else
>  	cpp_error (pfile, CPP_DL_PEDWARN,
> -		   "__VA_ARGS__ can only appear in the expansion"
> +		   "%<__VA_ARGS__%> can only appear in the expansion"
>  		   " of a C99 variadic macro");
>      }
>  
> @@ -2087,7 +2087,7 @@ identifier_diagnostics_on_lex (cpp_reade
>    /* For -Wc++-compat, warn about use of C++ named operators.  */
>    if (node->flags & NODE_WARN_OPERATOR)
>      cpp_warning (pfile, CPP_W_CXX_OPERATOR_NAMES,
> -		 "identifier \"%s\" is a special operator name in C++",
> +		 "identifier %qs is a special operator name in C++",
>  		 NODE_NAME (node));
>  }
>  
> @@ -3485,7 +3485,7 @@ cpp_maybe_module_directive (cpp_reader *
>  	      && _cpp_maybe_notify_macro_use (pfile, node, tok->src_loc)
>  	      && !cpp_fun_like_macro_p (node))
>  	    cpp_error_with_line (pfile, CPP_DL_ERROR, tok->src_loc, 0, 
> -				 "module control-line \"%s\" cannot be"
> +				 "module control-line %qs cannot be"
>  				 " an object-like macro",
>  				 NODE_NAME (node));
>  	}
> --- libcpp/macro.cc.jj	2024-09-12 23:12:54.046423901 +0200
> +++ libcpp/macro.cc	2024-09-12 23:13:32.246876185 +0200
> @@ -141,7 +141,7 @@ class vaopt_state {
>  	if (m_state > 0)
>  	  {
>  	    cpp_error_at (m_pfile, CPP_DL_ERROR, token->src_loc,
> -			  "__VA_OPT__ may not appear in a __VA_OPT__");
> +			  "%<__VA_OPT__%> may not appear in a %<__VA_OPT__%>");
>  	    return ERROR;
>  	  }
>  	++m_state;
> @@ -154,7 +154,7 @@ class vaopt_state {
>  	if (token->type != CPP_OPEN_PAREN)
>  	  {
>  	    cpp_error_at (m_pfile, CPP_DL_ERROR, m_location,
> -			  "__VA_OPT__ must be followed by an "
> +			  "%<__VA_OPT__%> must be followed by an "
>  			  "open parenthesis");
>  	    return ERROR;
>  	  }
> @@ -232,7 +232,7 @@ class vaopt_state {
>    {
>      if (m_variadic && m_state != 0)
>        cpp_error_at (m_pfile, CPP_DL_ERROR, m_location,
> -		    "unterminated __VA_OPT__");
> +		    "unterminated %<__VA_OPT__%>");
>      return m_state == 0;
>    }
>  
> @@ -393,7 +393,7 @@ builtin_has_include_1 (cpp_reader *pfile
>  {
>    if (!pfile->state.in_directive)
>      cpp_error (pfile, CPP_DL_ERROR,
> -	       "\"%s\" used outside of preprocessing directive", name);
> +	       "%qs used outside of preprocessing directive", name);
>  
>    pfile->state.angled_headers = true;
>    const auto sav_padding = pfile->state.directive_wants_padding;
> @@ -404,7 +404,7 @@ builtin_has_include_1 (cpp_reader *pfile
>      token = _cpp_get_token_no_padding (pfile);
>    else
>      cpp_error (pfile, CPP_DL_ERROR,
> -	       "missing '(' before \"%s\" operand", name);
> +	       "missing %<(%> before %qs operand", name);
>    pfile->state.angled_headers = false;
>    pfile->state.directive_wants_padding = sav_padding;
>  
> @@ -422,7 +422,7 @@ builtin_has_include_1 (cpp_reader *pfile
>      fname = _cpp_bracket_include (pfile);
>    else
>      cpp_error (pfile, CPP_DL_ERROR,
> -	       "operator \"%s\" requires a header-name", name);
> +	       "operator %qs requires a header-name", name);
>    return fname;
>  }
>  
> @@ -451,7 +451,7 @@ builtin_has_include (cpp_reader *pfile,
>    if (paren
>        && _cpp_get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
>      cpp_error (pfile, CPP_DL_ERROR,
> -	       "missing ')' after \"%s\" operand", NODE_NAME (op));
> +	       "missing %<)%> after %qs operand", NODE_NAME (op));
>  
>    return result;
>  }
> @@ -496,7 +496,7 @@ builtin_has_embed (cpp_reader *pfile)
>        if (!*fname)
>  	{
>  	  cpp_error_with_line (pfile, CPP_DL_ERROR, params.loc, 0,
> -			       "empty filename in '%s'", "__has_embed");
> +			       "empty filename in %qs", "__has_embed");
>  	  ok = false;
>  	}
>  
> @@ -530,7 +530,7 @@ _cpp_warn_if_unused_macro (cpp_reader *p
>  			    (linemap_lookup (pfile->line_table,
>  					     macro->line))))
>  	cpp_warning_with_line (pfile, CPP_W_UNUSED_MACROS, macro->line, 0,
> -			       "macro \"%s\" is not used", NODE_NAME (node));
> +			       "macro %qs is not used", NODE_NAME (node));
>      }
>  
>    return 1;
> @@ -569,14 +569,14 @@ _cpp_builtin_macro_text (cpp_reader *pfi
>    switch (node->value.builtin)
>      {
>      default:
> -      cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
> +      cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro %qs",
>  		 NODE_NAME (node));
>        break;
>  
>      case BT_TIMESTAMP:
>        {
>  	if (CPP_OPTION (pfile, warn_date_time))
> -	  cpp_warning (pfile, CPP_W_DATE_TIME, "macro \"%s\" might prevent "
> +	  cpp_warning (pfile, CPP_W_DATE_TIME, "macro %qs might prevent "
>  		       "reproducible builds", NODE_NAME (node));
>  
>  	cpp_buffer *pbuffer = cpp_get_buffer (pfile);
> @@ -684,7 +684,7 @@ _cpp_builtin_macro_text (cpp_reader *pfi
>      case BT_DATE:
>      case BT_TIME:
>        if (CPP_OPTION (pfile, warn_date_time))
> -	cpp_warning (pfile, CPP_W_DATE_TIME, "macro \"%s\" might prevent "
> +	cpp_warning (pfile, CPP_W_DATE_TIME, "macro %qs might prevent "
>  		     "reproducible builds", NODE_NAME (node));
>        if (pfile->date == NULL)
>  	{
> @@ -730,7 +730,8 @@ _cpp_builtin_macro_text (cpp_reader *pfi
>      case BT_COUNTER:
>        if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
>  	cpp_error (pfile, CPP_DL_ERROR,
> -	    "__COUNTER__ expanded inside directive with -fdirectives-only");
> +		   "%<__COUNTER__%> expanded inside directive with "
> +		   "%<-fdirectives-only%>");
>        number = pfile->counter++;
>        break;
>  
> @@ -756,7 +757,7 @@ _cpp_builtin_macro_text (cpp_reader *pfi
>        if (CPP_OPTION (pfile, traditional))
>  	{
>  	  cpp_error (pfile, CPP_DL_ERROR, /* FIXME should be DL_SORRY */
> -		     "'__has_embed' not supported in traditional C");
> +		     "%<__has_embed%> not supported in traditional C");
>  	  break;
>  	}
>        number = builtin_has_embed (pfile);
> @@ -884,7 +885,7 @@ builtin_macro (cpp_reader *pfile, cpp_ha
>    else
>      _cpp_push_token_context (pfile, NULL, token, 1);
>    if (pfile->buffer->cur != pfile->buffer->rlimit)
> -    cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
> +    cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro %qs",
>  	       NODE_NAME (node));
>    _cpp_pop_buffer (pfile);
>  
> @@ -1003,7 +1004,7 @@ stringify_arg (cpp_reader *pfile, const
>    if (backslash_count & 1)
>      {
>        cpp_error (pfile, CPP_DL_WARNING,
> -		 "invalid string literal, ignoring final '\\'");
> +		 "invalid string literal, ignoring final %<\\%>");
>        dest--;
>      }
>  
> @@ -1200,26 +1201,26 @@ _cpp_arguments_ok (cpp_reader *pfile, cp
>  	      if (CPP_OPTION (pfile, cplusplus))
>  		cpp_pedwarning (pfile, CPP_W_CXX20_EXTENSIONS,
>  				"ISO C++11 requires at least one argument "
> -				"for the \"...\" in a variadic macro");
> +				"for the %<...%> in a variadic macro");
>  	      else
>  		cpp_pedwarning (pfile, CPP_W_PEDANTIC,
>  				"ISO C99 requires at least one argument "
> -				"for the \"...\" in a variadic macro");
> +				"for the %<...%> in a variadic macro");
>  	    }
>  	  return true;
>  	}
>  
>        cpp_error (pfile, CPP_DL_ERROR,
> -		 "macro \"%s\" requires %u arguments, but only %u given",
> +		 "macro %qs requires %u arguments, but only %u given",
>  		 NODE_NAME (node), macro->paramc, argc);
>      }
>    else
>      cpp_error (pfile, CPP_DL_ERROR,
> -	       "macro \"%s\" passed %u arguments, but takes just %u",
> +	       "macro %qs passed %u arguments, but takes just %u",
>  	       NODE_NAME (node), argc, macro->paramc);
>  
>    if (macro->line > RESERVED_LOCATION_COUNT)
> -    cpp_error_at (pfile, CPP_DL_NOTE, macro->line, "macro \"%s\" defined here",
> +    cpp_error_at (pfile, CPP_DL_NOTE, macro->line, "macro %qs defined here",
>  		  NODE_NAME (node));
>  
>    return false;
> @@ -1413,7 +1414,7 @@ collect_args (cpp_reader *pfile, const c
>        if (token == &pfile->endarg)
>  	_cpp_backup_tokens (pfile, 1);
>        cpp_error (pfile, CPP_DL_ERROR,
> -		 "unterminated argument list invoking macro \"%s\"",
> +		 "unterminated argument list invoking macro %qs",
>  		 NODE_NAME (node));
>      }
>    else
> @@ -1559,8 +1560,8 @@ enter_macro_context (cpp_reader *pfile,
>  	    {
>  	      if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
>  		cpp_warning (pfile, CPP_W_TRADITIONAL,
> - "function-like macro \"%s\" must be used with arguments in traditional C",
> -			     NODE_NAME (node));
> +			     "function-like macro %qs must be used with "
> +			     "arguments in traditional C", NODE_NAME (node));
>  
>  	      if (pragma_buff)
>  		_cpp_release_buff (pfile, pragma_buff);
> @@ -3462,7 +3463,7 @@ _cpp_save_parameter (cpp_reader *pfile,
>    /* Constraint 6.10.3.6 - duplicate parameter names.  */
>    if (node->type == NT_MACRO_ARG)
>      {
> -      cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
> +      cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter %qs",
>  		 NODE_NAME (node));
>        return false;
>      }
> @@ -3544,11 +3545,11 @@ parse_params (cpp_reader *pfile, unsigne
>  	  {
>  	    const char *const msgs[5] =
>  	      {
> -	       N_("expected parameter name, found \"%s\""),
> -	       N_("expected ',' or ')', found \"%s\""),
> +	       N_("expected parameter name, found %qs"),
> +	       N_("expected %<,%> or %<)%>, found %qs"),
>  	       N_("expected parameter name before end of line"),
> -	       N_("expected ')' before end of line"),
> -	       N_("expected ')' after \"...\"")
> +	       N_("expected %<)%> before end of line"),
> +	       N_("expected %<)%> after %<...%>")
>  	      };
>  	    unsigned ix = prev_ident;
>  	    const unsigned char *as_text = NULL;
> @@ -3663,7 +3664,7 @@ create_iso_definition (cpp_reader *pfile
>  {
>    bool following_paste_op = false;
>    const char *paste_op_error_msg =
> -    N_("'##' cannot appear at either end of a macro expansion");
> +    N_("%<##%> cannot appear at either end of a macro expansion");
>    unsigned int num_extra_tokens = 0;
>    unsigned nparms = 0;
>    cpp_hashnode **params = NULL;
> @@ -3779,7 +3780,7 @@ create_iso_definition (cpp_reader *pfile
>  	  else if (CPP_OPTION (pfile, lang) != CLK_ASM)
>  	    {
>  	      cpp_error (pfile, CPP_DL_ERROR,
> -			 "'#' is not followed by a macro parameter");
> +			 "%<#%> is not followed by a macro parameter");
>  	      goto out;
>  	    }
>  	}
> @@ -3940,15 +3941,14 @@ _cpp_create_definition (cpp_reader *pfil
>  	    = (cpp_builtin_macro_p (node) && !(node->flags & NODE_WARN))
>  	    ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
>  
> -	  bool warned = 
> -	    cpp_pedwarning_with_line (pfile, reason,
> -				      macro->line, 0,
> -				      "\"%s\" redefined", NODE_NAME (node));
> +	  bool warned
> +	    =  cpp_pedwarning_with_line (pfile, reason, macro->line, 0,
> +					 "%qs redefined", NODE_NAME (node));
>  
>  	  if (warned && cpp_user_macro_p (node))
> -	    cpp_error_with_line (pfile, CPP_DL_NOTE,
> -				 node->value.macro->line, 0,
> -			 "this is the location of the previous definition");
> +	    cpp_error_with_line (pfile, CPP_DL_NOTE, node->value.macro->line,
> +				 0, "this is the location of the previous "
> +				    "definition");
>  	}
>        _cpp_free_definition (node);
>      }
> @@ -4085,8 +4085,8 @@ check_trad_stringification (cpp_reader *
>  	      && !memcmp (p, NODE_NAME (node), len))
>  	    {
>  	      cpp_warning (pfile, CPP_W_TRADITIONAL,
> -	   "macro argument \"%s\" would be stringified in traditional C",
> -			 NODE_NAME (node));
> +			   "macro argument %qs would be stringified in "
> +			   "traditional C", NODE_NAME (node));
>  	      break;
>  	    }
>  	}
> --- libcpp/pch.cc.jj	2024-02-01 20:31:40.597630432 +0100
> +++ libcpp/pch.cc	2024-09-12 23:13:32.241876256 +0200
> @@ -613,7 +613,7 @@ cpp_valid_state (cpp_reader *r, const ch
>  	{
>  	  if (CPP_OPTION (r, warn_invalid_pch))
>  	    cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
> -		                "%s: not used because `%.*s' is poisoned",
> +		                "%s: not used because %<%.*s%> is poisoned",
>  		                name, m.name_length, namebuf);
>  	  goto fail;
>  	}
> @@ -635,7 +635,7 @@ cpp_valid_state (cpp_reader *r, const ch
>  
>  	  if (CPP_OPTION (r, warn_invalid_pch))
>  	    cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
> -		                "%s: not used because `%.*s' not defined",
> +		                "%s: not used because %<%.*s%> not defined",
>  		                name, m.name_length, namebuf);
>  	  goto fail;
>  	}
> @@ -647,10 +647,12 @@ cpp_valid_state (cpp_reader *r, const ch
>  	{
>  	  if (CPP_OPTION (r, warn_invalid_pch))
>  	    cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
> -	       "%s: not used because `%.*s' defined as `%s' not `%.*s'",
> -		       name, m.name_length, namebuf, newdefn + m.name_length,
> -		       m.definition_length - m.name_length,
> -		       namebuf +  m.name_length);
> +				"%s: not used because %<%.*s%> defined as "
> +				"%<%s%> not %<%.*s%>",
> +				name, m.name_length, namebuf,
> +				newdefn + m.name_length,
> +				m.definition_length - m.name_length,
> +				namebuf +  m.name_length);
>  	  goto fail;
>  	}
>      }
> @@ -688,7 +690,7 @@ cpp_valid_state (cpp_reader *r, const ch
>  	{
>  	  if (CPP_OPTION (r, warn_invalid_pch))
>  	    cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
> -		                "%s: not used because `%s' is defined",
> +		                "%s: not used because %qs is defined",
>  		                name, first);
>  	  goto fail;
>  	}
> @@ -708,7 +710,7 @@ cpp_valid_state (cpp_reader *r, const ch
>      {
>        if (CPP_OPTION (r, warn_invalid_pch))
>  	cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
> -		            "%s: not used because `__COUNTER__' is invalid",
> +		            "%s: not used because %<__COUNTER__%> is invalid",
>  		            name);
>        goto fail;
>      }
> --- libcpp/traditional.cc.jj	2024-01-03 22:33:38.352691603 +0100
> +++ libcpp/traditional.cc	2024-09-12 23:13:32.244876213 +0200
> @@ -819,7 +819,7 @@ _cpp_scan_out_logical_line (cpp_reader *
>  
>    if (lex_state == ls_fun_close)
>      cpp_error_with_line (pfile, CPP_DL_ERROR, fmacro.line, 0,
> -			 "unterminated argument list invoking macro \"%s\"",
> +			 "unterminated argument list invoking macro %qs",
>  			 NODE_NAME (fmacro.node));
>    return result;
>  }
> @@ -888,7 +888,7 @@ recursive_macro (cpp_reader *pfile, cpp_
>  
>    if (recursing)
>      cpp_error (pfile, CPP_DL_ERROR,
> -	       "detected recursion whilst expanding macro \"%s\"",
> +	       "detected recursion whilst expanding macro %qs",
>  	       NODE_NAME (node));
>  
>    return recursing;
> --- gcc/Makefile.in.jj	2024-09-12 18:15:16.646678098 +0200
> +++ gcc/Makefile.in	2024-09-12 19:54:32.336312293 +0200
> @@ -2957,12 +2957,12 @@ generated_files = config.h tm.h $(TM_P_H
>         $(ALL_GTFILES_H) gtype-desc.cc gtype-desc.h version.h \
>         options.h target-hooks-def.h insn-opinit.h \
>         common/common-target-hooks-def.h pass-instances.def \
> -       $(GIMPLE_MATCH_PD_SEQ_SRC) $(GENERIC_MATCH_PD_SEQ_SRC) \
> -       gimple-match-auto.h generic-match-auto.h \
>         c-family/c-target-hooks-def.h d/d-target-hooks-def.h \
>         $(TM_RUST_H) rust/rust-target-hooks-def.h \
>         case-cfn-macros.h \
>         cfn-operators.pd omp-device-properties.h
> +generated_match_files = gimple-match-auto.h generic-match-auto.h \
> +	$(GIMPLE_MATCH_PD_SEQ_SRC) $(GENERIC_MATCH_PD_SEQ_SRC)
>  
>  #
>  # How to compile object files to run on the build machine.
> @@ -3146,7 +3146,8 @@ build/genmatch$(build_exeext): BUILD_LIB
>  endif
>  
>  build/genmatch$(build_exeext) : $(BUILD_CPPLIB) \
> -  $(BUILD_ERRORS) build/vec.o build/hash-table.o build/sort.o
> +  build/vec.o build/hash-table.o build/sort.o libcommon.a \
> +  $(LIBBACKTRACE)
>  
>  # These programs are not linked with the MD reader.
>  build/gengtype$(build_exeext) : build/gengtype-lex.o build/gengtype-parse.o \
> @@ -4575,6 +4576,8 @@ po/gcc.pot: force
>  # objects from $(OBJS) as early as possible, build all their
>  # prerequisites strictly before all objects.
>  $(ALL_HOST_OBJS) : | $(generated_files)
> +# build/genmatch depends on libcommon.a, so avoid circular dependencies.
> +$(filter-out $(OBJS-libcommon),$(ALL_HOST_OBJS)) : | $(generated_match_files)
>  
>  # Include the auto-generated dependencies for all host objects.
>  DEPFILES = \
> --- gcc/genmatch.cc.jj	2024-09-12 18:15:16.685677568 +0200
> +++ gcc/genmatch.cc	2024-09-12 19:14:55.970740747 +0200
> @@ -31,18 +31,21 @@ along with GCC; see the file COPYING3.
>  #include "hash-set.h"
>  #include "is-a.h"
>  #include "ordered-hash-map.h"
> +#include "pretty-print.h"
> +#include "input.h"
>  
> -
> -/* Stubs for GGC referenced through instantiations triggered by hash-map.  */
> -void *ggc_internal_cleared_alloc (size_t, void (*)(void *),
> -				  size_t, size_t MEM_STAT_DECL)
> -{
> -  return NULL;
> -}
> -void ggc_free (void *)
> +void
> +fatal (const char *format, ...)
>  {
> -}
> +  va_list ap;
>  
> +  va_start (ap, format);
> +  fprintf (stderr, "%s: ", progname);
> +  vfprintf (stderr, format, ap);
> +  va_end (ap);
> +  fputc ('\n', stderr);
> +  exit (FATAL_EXIT_CODE);
> +}
>  
>  /* Global state.  */
>  
> @@ -52,29 +55,9 @@ unsigned verbose;
>  
>  /* libccp helpers.  */
>  
> -static class line_maps *line_table;
> -
> -/* The rich_location class within libcpp requires a way to expand
> -   location_t instances, and relies on the client code
> -   providing a symbol named
> -     linemap_client_expand_location_to_spelling_point
> -   to do this.
> -
> -   This is the implementation for genmatch.  */
> -
> -expanded_location
> -linemap_client_expand_location_to_spelling_point (const line_maps *set,
> -						  location_t loc,
> -						  enum location_aspect)
> -{
> -  const struct line_map_ordinary *map;
> -  loc = linemap_resolve_location (set, loc, LRK_SPELLING_LOCATION, &map);
> -  return linemap_expand_location (set, map, loc);
> -}
> -
>  static bool
>  #if GCC_VERSION >= 4001
> -__attribute__((format (printf, 5, 0)))
> +__attribute__((format (gcc_diag, 5, 0)))
>  #endif
>  diagnostic_cb (cpp_reader *, enum cpp_diagnostic_level errtype,
>  	       enum cpp_warning_reason, rich_location *richloc,
> @@ -86,7 +69,11 @@ diagnostic_cb (cpp_reader *, enum cpp_di
>    expanded_location loc = linemap_expand_location (line_table, map, location);
>    fprintf (stderr, "%s:%d:%d %s: ", loc.file, loc.line, loc.column,
>  	   (errtype == CPP_DL_WARNING) ? "warning" : "error");
> -  vfprintf (stderr, msg, *ap);
> +  pretty_printer pp;
> +  pp.set_output_stream (stderr);
> +  text_info text (msg, ap, errno);
> +  pp_format_verbatim (&pp, &text);
> +  pp_flush (&pp);
>    fprintf (stderr, "\n");
>    FILE *f = fopen (loc.file, "r");
>    if (f)
> @@ -119,7 +106,7 @@ notfound:
>  
>  static void
>  #if GCC_VERSION >= 4001
> -__attribute__((format (printf, 2, 3)))
> +__attribute__((format (gcc_diag, 2, 3)))
>  #endif
>  fatal_at (const cpp_token *tk, const char *msg, ...)
>  {
> @@ -132,7 +119,7 @@ fatal_at (const cpp_token *tk, const cha
>  
>  static void
>  #if GCC_VERSION >= 4001
> -__attribute__((format (printf, 2, 3)))
> +__attribute__((format (gcc_diag, 2, 3)))
>  #endif
>  fatal_at (location_t loc, const char *msg, ...)
>  {
> @@ -145,7 +132,7 @@ fatal_at (location_t loc, const char *ms
>  
>  static void
>  #if GCC_VERSION >= 4001
> -__attribute__((format (printf, 2, 3)))
> +__attribute__((format (gcc_diag, 2, 3)))
>  #endif
>  warning_at (const cpp_token *tk, const char *msg, ...)
>  {
> @@ -158,7 +145,7 @@ warning_at (const cpp_token *tk, const c
>  
>  static void
>  #if GCC_VERSION >= 4001
> -__attribute__((format (printf, 2, 3)))
> +__attribute__((format (gcc_diag, 2, 3)))
>  #endif
>  warning_at (location_t loc, const char *msg, ...)
>  {
> @@ -267,8 +254,8 @@ output_line_directive (FILE *f, location
>  		      bool dumpfile = false, bool fnargs = false,
>  		      bool indirect_line_numbers = false)
>  {
> -  typedef pair_hash<nofree_string_hash, int_hash<int, -1>> location_hash;
> -  static hash_map<location_hash, int> loc_id_map;
> +  typedef pair_hash<nofree_string_hash, int_hash<int, -1>> loc_hash;
> +  static hash_map<loc_hash, int> loc_id_map;
>    const line_map_ordinary *map;
>    linemap_resolve_location (line_table, location, LRK_SPELLING_LOCATION, &map);
>    expanded_location loc = linemap_expand_location (line_table, map, location);
> @@ -4558,7 +4545,7 @@ parser::eat_ident (const char *s)
>    const cpp_token *token = peek ();
>    const char *t = get_ident ();
>    if (strcmp (s, t) != 0)
> -    fatal_at (token, "expected '%s' got '%s'\n", s, t);
> +    fatal_at (token, "expected %qs got %qs", s, t);
>    return token;
>  }
>  
> @@ -4626,7 +4613,7 @@ parser::parse_operation (unsigned char &
>  	  alt_id = xstrdup (id);
>  	  alt_id[strlen (id) - 1] = '\0';
>  	  if (opt_grp == 1)
> -	    fatal_at (id_tok, "use '%s?' here", alt_id);
> +	    fatal_at (id_tok, "use %<%s?%> here", alt_id);
>  	}
>        else
>  	opt_grp = 1;
> @@ -4711,10 +4698,10 @@ parser::parse_expr ()
>    if (token->type == CPP_XOR && !(token->flags & PREV_WHITE))
>      {
>        if (!parsing_match_operand)
> -	fatal_at (token, "modifier '^' is only valid in a match expression");
> +	fatal_at (token, "modifier %<^%> is only valid in a match expression");
>  
>        if (!(*e->operation == COND_EXPR))
> -	fatal_at (token, "modifier '^' can only act on operation COND_EXPR");
> +	fatal_at (token, "modifier %<^%> can only act on operation %<COND_EXPR%>");
>  
>        eat_token (CPP_XOR);
>        e->match_phi = true;
> @@ -5429,7 +5416,7 @@ parser::parse_pattern ()
>      {
>        if (active_ifs.length () > 0
>  	  || active_fors.length () > 0)
> -	fatal_at (token, "define_predicates inside if or for is not supported");
> +	fatal_at (token, "%<define_predicates%> inside if or for is not supported");
>        parse_predicates (token->src_loc);
>      }
>    else if (strcmp (id, "define_operator_list") == 0)
> @@ -5439,10 +5426,11 @@ parser::parse_pattern ()
>  	fatal_at (token, "operator-list inside if or for is not supported");
>        parse_operator_list (token->src_loc);
>      }
> +  else if (active_ifs.length () == 0 && active_fors.length () == 0)
> +    fatal_at (token, "expected %<define_predicates%>, %<simplify%>, "
> +		     "%<match%>, %<for%> or %<if%>");
>    else
> -    fatal_at (token, "expected %s'simplify', 'match', 'for' or 'if'",
> -	      active_ifs.length () == 0 && active_fors.length () == 0
> -	      ? "'define_predicates', " : "");
> +    fatal_at (token, "expected %<simplify%>, %<match%>, %<for%> or %<if%>");
>  
>    eat_token (CPP_CLOSE_PAREN);
>  }
> @@ -5484,12 +5472,13 @@ parser::finish_match_operand (operand *o
>  	  if (cpts[i][j]->value_match)
>  	    {
>  	      if (value_match)
> -		fatal_at (cpts[i][j]->location, "duplicate @@");
> +		fatal_at (cpts[i][j]->location, "duplicate %s", "@@");
>  	      value_match = cpts[i][j];
>  	    }
>  	}
>        if (cpts[i].length () == 1 && value_match)
> -	fatal_at (value_match->location, "@@ without a matching capture");
> +	fatal_at (value_match->location,
> +		  "%s without a matching capture", "@@");
>        if (value_match)
>  	{
>  	  /* Duplicate prevailing capture with the existing ID, create
> --- gcc/c-family/c-lex.cc.jj	2024-08-31 15:57:38.668024919 +0200
> +++ gcc/c-family/c-lex.cc	2024-09-12 19:40:38.012724079 +0200
> @@ -342,7 +342,7 @@ c_common_has_attribute (cpp_reader *pfil
>    if (token->type != CPP_OPEN_PAREN)
>      {
>        cpp_error (pfile, CPP_DL_ERROR,
> -		 "missing '(' after \"__has_attribute\"");
> +		 "missing %<(%> after %<__has_attribute%>");
>        return 0;
>      }
>    token = get_token_no_padding (pfile);
> @@ -464,13 +464,13 @@ c_common_has_attribute (cpp_reader *pfil
>    else
>      {
>        cpp_error (pfile, CPP_DL_ERROR,
> -		 "macro \"__has_attribute\" requires an identifier");
> +		 "macro %<__has_attribute%> requires an identifier");
>        return 0;
>      }
>  
>    if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
>      cpp_error (pfile, CPP_DL_ERROR,
> -	       "missing ')' after \"__has_attribute\"");
> +	       "missing %<)%> after %<__has_attribute%>");
>  
>    return result;
>  }
> @@ -484,7 +484,7 @@ c_common_lex_availability_macro (cpp_rea
>    if (token->type != CPP_OPEN_PAREN)
>      {
>        cpp_error (pfile, CPP_DL_ERROR,
> -		 "missing '(' after \"__has_%s\"", builtin);
> +		 "missing %<(%> after %<__has_%s%>", builtin);
>        return 0;
>      }
>  
> @@ -497,14 +497,14 @@ c_common_lex_availability_macro (cpp_rea
>        if (token->type != CPP_CLOSE_PAREN)
>  	{
>  	  cpp_error (pfile, CPP_DL_ERROR,
> -		     "expected ')' after \"%s\"", name);
> +		     "expected %<)%> after %<%s%>", name);
>  	  name = "";
>  	}
>      }
>    else
>      {
>        cpp_error (pfile, CPP_DL_ERROR,
> -		 "macro \"__has_%s\" requires an identifier", builtin);
> +		 "macro %<__has_%s%> requires an identifier", builtin);
>        if (token->type == CPP_CLOSE_PAREN)
>  	return 0;
>      }
> --- gcc/testsuite/c-c++-common/cpp/counter-2.c.jj	2020-05-11 23:00:07.547503865 +0200
> +++ gcc/testsuite/c-c++-common/cpp/counter-2.c	2024-09-13 09:20:12.497617451 +0200
> @@ -10,5 +10,5 @@
>  #ifdef __COUNTER__  /* Macro not expanded. */
>  #endif
>  
> -#if __COUNTER__ == 0  /* { dg-error "__COUNTER__ expanded inside directive with -fdirectives-only" } */
> +#if __COUNTER__ == 0  /* { dg-error "'__COUNTER__' expanded inside directive with '-fdirectives-only'" } */
>  #endif
> --- gcc/testsuite/c-c++-common/cpp/embed-3.c.jj	2024-09-12 23:12:54.031424116 +0200
> +++ gcc/testsuite/c-c++-common/cpp/embed-3.c	2024-09-13 10:13:14.831620615 +0200
> @@ -53,20 +53,20 @@
>  /* { dg-error "unbalanced '\\\)'" "" { target *-*-* } .-1 } */
>  /* { dg-error "unbalanced '\\\['" "" { target *-*-* } .-2 } */
>  /* { dg-error "unbalanced '\\\('" "" { target *-*-* } .-3 } */
> -#embed limit(1) /* { dg-error "#embed expects \\\"FILENAME\\\" or <FILENAME>" } */
> +#embed limit(1) /* { dg-error "'#embed' expects '\\\"FILENAME\\\"' or '<FILENAME>'" } */
>  #define FOO 1
> -#embed __FILE__ limit(0 + defined(FOO)) /* { dg-error "'defined' in #embed parameter" } */
> -#embed /* { dg-error "#embed expects \\\"FILENAME\\\" or <FILENAME>" } */
> +#embed __FILE__ limit(0 + defined(FOO)) /* { dg-error "'defined' in '#embed' parameter" } */
> +#embed /* { dg-error "'#embed' expects '\\\"FILENAME\\\"' or '<FILENAME>'" } */
>  #embed "
>  /* { dg-warning "missing terminating \\\" character" "" { target *-*-* } .-1 } */
> - /* { dg-error "#embed expects \\\"FILENAME\\\" or <FILENAME>" "" { target *-*-* } .-2 } */
> + /* { dg-error "'#embed' expects '\\\"FILENAME\\\"' or '<FILENAME>'" "" { target *-*-* } .-2 } */
>  #embed <
>  /* { dg-error "empty filename in #embed" "" { target *-*-* } .-1 } */
> -/* { dg-error "missing terminating > character" "" { target *-*-* } .-2 } */
> -#embed >  /* { dg-error "#embed expects \\\"FILENAME\\\" or <FILENAME>" } */
> +/* { dg-error "missing terminating '>' character" "" { target *-*-* } .-2 } */
> +#embed >  /* { dg-error "'#embed' expects '\\\"FILENAME\\\"' or '<FILENAME>'" } */
>  #embed "" /* { dg-error "empty filename in #embed" } */
>  #embed <> /* { dg-error "empty filename in #embed" } */
> -#embed embed-4.c  /* { dg-error "#embed expects \\\"FILENAME\\\" or <FILENAME>" } */
> +#embed embed-4.c  /* { dg-error "'#embed' expects '\\\"FILENAME\\\"' or '<FILENAME>'" } */
>  #embed __FILE__ foo: /* { dg-error "expected parameter name" } */
>  /* { dg-error "unknown embed parameter 'foo'" "" { target *-*-* } .-1 } */
>  #embed __FILE__ bar:: /* { dg-error "expected parameter name" } */
> --- gcc/testsuite/c-c++-common/cpp/embed-4.c.jj	2024-09-12 23:12:54.031424116 +0200
> +++ gcc/testsuite/c-c++-common/cpp/embed-4.c	2024-09-13 10:49:02.502992675 +0200
> @@ -2,7 +2,7 @@
>  /* { dg-options "" } */
>  
>  #if 1 + __has_embed (__FILE__ , limit(1)) /* { dg-error "expected parameter name" } */
> -/* { dg-error "missing binary operator before token \\\"limit\\\"" "" { target *-*-* } .-1 } */
> +/* { dg-error "missing binary operator before token 'limit'" "" { target *-*-* } .-1 } */
>  #endif
>  #if 1 + __has_embed (__FILE__ limit(1) /* { dg-error "expected '\\\)'" } */
>  #endif
> @@ -81,35 +81,35 @@
>  /* { dg-error "expected '\\\)'" "" { target *-*-* } .-3 } */
>  #endif
>  #define FOO 1
> -#if 1 + __has_embed (limit(1)) /* { dg-error "operator \\\"__has_embed\\\" requires a header-name" } */
> -/* { dg-error "missing binary operator before token \\\"1\\\"" "" { target *-*-* } .-1 } */
> +#if 1 + __has_embed (limit(1)) /* { dg-error "operator '__has_embed' requires a header-name" } */
> +/* { dg-error "missing binary operator before token '1'" "" { target *-*-* } .-1 } */
>  #endif
> -#if 1 + __has_embed (__FILE__ limit(0 + defined(FOO))) /* { dg-error "'defined' in #embed parameter" } */
> +#if 1 + __has_embed (__FILE__ limit(0 + defined(FOO))) /* { dg-error "'defined' in '#embed' parameter" } */
>  #endif
> -int a = __has_embed (__FILE__); /* { dg-error "\\\"__has_embed\\\" used outside of preprocessing directive" } */
> -#if __has_embed /* { dg-error "missing '\\\(' before \\\"__has_embed\\\" operand" } */
> -/* { dg-error "operator \\\"__has_embed\\\" requires a header-name" "" { target *-*-* } .-1 } */
> +int a = __has_embed (__FILE__); /* { dg-error "'__has_embed' used outside of preprocessing directive" } */
> +#if __has_embed /* { dg-error "missing '\\\(' before '__has_embed' operand" } */
> +/* { dg-error "operator '__has_embed' requires a header-name" "" { target *-*-* } .-1 } */
>  #endif
> -#if __has_embed( /* { dg-error "operator \\\"__has_embed\\\" requires a header-name" } */
> +#if __has_embed( /* { dg-error "operator '__has_embed' requires a header-name" } */
>  #endif
> -#if __has_embed() /* { dg-error "operator \\\"__has_embed\\\" requires a header-name" } */
> +#if __has_embed() /* { dg-error "operator '__has_embed' requires a header-name" } */
>  #endif
>  #if __has_embed(")
>  /* { dg-warning "missing terminating \\\" character" "" { target *-*-* } .-1 } */
> -/* { dg-error "operator \\\"__has_embed\\\" requires a header-name" "" { target *-*-* } .-2 } */
> +/* { dg-error "operator '__has_embed' requires a header-name" "" { target *-*-* } .-2 } */
>  #endif
>  #if __has_embed(<)
> -/* { dg-error "missing terminating > character" "" { target *-*-* } .-1 } */
> +/* { dg-error "missing terminating '>' character" "" { target *-*-* } .-1 } */
>  /* { dg-error "expected '\\\)'" "" { target *-*-* } .-2 } */
>  #endif
> -#if __has_embed(>) /* { dg-error "operator \\\"__has_embed\\\" requires a header-name" } */
> +#if __has_embed(>) /* { dg-error "operator '__has_embed' requires a header-name" } */
>  #endif
>  #if __has_embed("") /* { dg-error "empty filename in '__has_embed'" } */
>  #endif
>  #if __has_embed(<>) /* { dg-error "empty filename in '__has_embed'" } */
>  #endif
> -#if __has_embed(embed-4.c) /* { dg-error "operator \\\"__has_embed\\\" requires a header-name" } */
> -/* { dg-error "missing binary operator before token \\\"4.c\\\"" "" { target *-*-* } .-1 } */
> +#if __has_embed(embed-4.c) /* { dg-error "operator '__has_embed' requires a header-name" } */
> +/* { dg-error "missing binary operator before token '4.c'" "" { target *-*-* } .-1 } */
>  #endif
>  #if __has_embed(__FILE__ foo:) /* { dg-error "expected parameter name" } */
>  /* { dg-error "missing '\\\(' in expression" "" { target *-*-* } .-1 } */
> @@ -120,10 +120,10 @@ int a = __has_embed (__FILE__); /* { dg-
>  /* { dg-error "missing '\\\(' in expression" "" { target *-*-* } .-1 } */
>  #endif
>  #if __has_embed(__FILE__ foo:bar) /* { dg-error "expected parameter name" } */
> -/* { dg-error "missing binary operator before token \\\"bar\\\"" "" { target *-*-* } .-1 } */
> +/* { dg-error "missing binary operator before token 'bar'" "" { target *-*-* } .-1 } */
>  #endif
>  #if __has_embed(__FILE__ foo::bar::baz) /* { dg-error "expected parameter name" } */
> -/* { dg-error "missing binary operator before token \\\"baz\\\"" "" { target *-*-* } .-1 } */
> +/* { dg-error "missing binary operator before token 'baz'" "" { target *-*-* } .-1 } */
>  #endif
>  #if __has_embed(__FILE__ foo : : bar) /* { dg-error "expected parameter name" } */
>  /* { dg-error "':' without preceding '\\\?'" "" { target *-*-* } .-1 } */
> @@ -132,7 +132,7 @@ int a = __has_embed (__FILE__); /* { dg-
>  /* { dg-error "missing '\\\(' in expression" "" { target *-*-* } .-1 } */
>  #endif
>  #if __has_embed(__FILE__ 42::foo) /* { dg-error "expected parameter name" } */
> -/* { dg-error "token \\\"::\\\" is not valid in preprocessor expressions" "" { target *-*-* } .-1 } */
> +/* { dg-error "token '::' is not valid in preprocessor expressions" "" { target *-*-* } .-1 } */
>  #endif
>  #if __has_embed(__FILE__ foo::42) /* { dg-error "expected parameter name" } */
>  /* { dg-error "missing '\\\(' in expression" "" { target *-*-* } .-1 } */
> --- gcc/testsuite/c-c++-common/cpp/embed-16.c.jj	2024-09-12 23:12:54.031424116 +0200
> +++ gcc/testsuite/c-c++-common/cpp/embed-16.c	2024-09-13 10:10:29.141909066 +0200
> @@ -6,7 +6,7 @@
>  #embed __FILE__ gnu::offset (1 / 0) /* { dg-error "division by zero in #embed" } */
>  #embed __FILE__ __gnu__::__offset__ (+ + +) /* { dg-error "operator '\\\+' has no right operand" } */
>  #define FOO 1
> -#embed __FILE__ gnu::offset(0 + defined(FOO)) /* { dg-error "'defined' in #embed parameter" } */
> +#embed __FILE__ gnu::offset(0 + defined(FOO)) /* { dg-error "'defined' in '#embed' parameter" } */
>  #embed __FILE__ gnu::offset (-1) /* { dg-error "negative embed parameter operand" } */
>  #embed __FILE__ gnu::offset (-42) /* { dg-error "negative embed parameter operand" } */
>  #embed __FILE__ gnu::offset (-9223372036854775807 - 1) /* { dg-error "negative embed parameter operand" } */
> @@ -19,7 +19,7 @@
>  #endif
>  #if 1 + __has_embed (__FILE__ gnu::offset(+ + +)) /* { dg-error "operator '\\\+' has no right operand" } */
>  #endif
> -#if 1 + __has_embed (__FILE__ gnu::offset(0 + defined(FOO))) /* { dg-error "'defined' in #embed parameter" } */
> +#if 1 + __has_embed (__FILE__ gnu::offset(0 + defined(FOO))) /* { dg-error "'defined' in '#embed' parameter" } */
>  #endif
>  #if 1 + __has_embed (__FILE__ gnu::offset (-1)) /* { dg-error "negative embed parameter operand" } */
>  #endif
> --- gcc/testsuite/c-c++-common/cpp/embed-18.c.jj	2024-09-12 23:12:54.031424116 +0200
> +++ gcc/testsuite/c-c++-common/cpp/embed-18.c	2024-09-13 10:11:07.860374297 +0200
> @@ -23,9 +23,9 @@
>  #embed "." gnu::base64("\u{53}\u{41}\u{3d}\u{00003d}") /* { dg-error "'gnu::base64' argument not valid base64 encoded string" } */
>  #embed "." gnu::base64("\U00000053\U00000041\U0000003d\U0000003d") /* { dg-error "'gnu::base64' argument not valid base64 encoded string" } */
>  #embed "." gnu::base64("\N{LATIN CAPITAL LETTER S}\N{LATIN CAPITAL LETTER A}\N{LATIN CAPITAL LETTER A}\N{LATIN CAPITAL LETTER A}") /* { dg-error "'gnu::base64' argument not valid base64 encoded string" } */
> -#embed "embed-18.c" gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with \\\".\\\"" } */
> -#embed <embed-18.c> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with \\\".\\\"" } */
> -#embed <.> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with \\\".\\\"" } */
> +#embed "embed-18.c" gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
> +#embed <embed-18.c> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
> +#embed <.> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
>  #embed "." gnu::base64("SA==") limit(3) /* { dg-error "'gnu::base64' parameter conflicts with 'limit' or 'gnu::offset' parameters" } */
>  #embed "." gnu::base64("SA==") gnu::offset(1) /* { dg-error "'gnu::base64' parameter conflicts with 'limit' or 'gnu::offset' parameters" } */
>  #if 1 + __has_embed ("." gnu::base64("") __gnu__::__base64__("")) /* { dg-error "duplicate embed parameter 'gnu::base64'" } */
> --- gcc/testsuite/c-c++-common/cpp/eof-2.c.jj	2020-10-20 22:47:02.236213355 +0200
> +++ gcc/testsuite/c-c++-common/cpp/eof-2.c	2024-09-13 09:57:17.569855397 +0200
> @@ -5,4 +5,4 @@
>  #define f(x) x
>  
>  #include "eof-2.h"
> - /* { dg-regexp {[^\n]*eof-2.h:4:21: error: unterminated argument list invoking macro "f"\n} } */
> + /* { dg-regexp {[^\n]*eof-2.h:4:21: error: unterminated argument list invoking macro 'f'\n} } */
> --- gcc/testsuite/c-c++-common/cpp/eof-3.c.jj	2020-10-20 22:47:02.236213355 +0200
> +++ gcc/testsuite/c-c++-common/cpp/eof-3.c	2024-09-13 09:57:23.151778204 +0200
> @@ -3,6 +3,6 @@
>  /* { dg-do preprocess } */
>  /* { dg-additional-options "-include $srcdir/c-c++-common/cpp/eof-2.h" } */
>  
> - /* { dg-regexp {[^\n]*eof-2.h:4:21: error: unterminated argument list invoking macro "f"\n} } */
> + /* { dg-regexp {[^\n]*eof-2.h:4:21: error: unterminated argument list invoking macro 'f'\n} } */
>  
>  token )
> --- gcc/testsuite/c-c++-common/cpp/fmax-include-depth.c.jj	2024-07-31 21:47:22.675998687 +0200
> +++ gcc/testsuite/c-c++-common/cpp/fmax-include-depth.c	2024-09-13 09:21:07.874848936 +0200
> @@ -1,4 +1,4 @@
>  /* { dg-do preprocess } */
>  /* { dg-options "-fmax-include-depth=1" } */
>  
> -#include "fmax-include-depth-1b.h" /* { dg-error ".include nested depth 1 exceeds maximum of 1 .use -fmax-include-depth=DEPTH to increase the maximum." } */
> +#include "fmax-include-depth-1b.h" /* { dg-error "'#include' nested depth 1 exceeds maximum of 1 \\\(use '-fmax-include-depth=DEPTH' to increase the maximum\\\)" } */
> --- gcc/testsuite/c-c++-common/cpp/has-builtin.c.jj	2020-01-14 20:02:46.649611841 +0100
> +++ gcc/testsuite/c-c++-common/cpp/has-builtin.c	2024-09-13 09:22:09.596992352 +0200
> @@ -6,44 +6,44 @@
>  #  error "__has_builtin is not defined"
>  #endif
>  
> -#if __has_builtin             // { dg-error "missing '\\\(' after \"__has_builtin\"" }
> +#if __has_builtin             // { dg-error "missing '\\\(' after '__has_builtin'" }
>  #endif
>  
> -#if __has_builtin (           // { dg-error "macro \"__has_builtin\" requires an identifier" }
> +#if __has_builtin (           // { dg-error "macro '__has_builtin' requires an identifier" }
>  #endif
>  
> -#if __has_builtin ()          // { dg-error "macro \"__has_builtin\" requires an identifier" }
> +#if __has_builtin ()          // { dg-error "macro '__has_builtin' requires an identifier" }
>  #endif
>  
> -#if __has_builtin (1)         // { dg-error "macro \"__has_builtin\" requires an identifier" }
> +#if __has_builtin (1)         // { dg-error "macro '__has_builtin' requires an identifier" }
>  #endif
>  
> -#if __has_builtin (1, 2)      // { dg-error "macro \"__has_builtin\" requires an identifier" }
> +#if __has_builtin (1, 2)      // { dg-error "macro '__has_builtin' requires an identifier" }
>  #endif
>  
> -#if __has_builtin (1 + 2)     // { dg-error "macro \"__has_builtin\" requires an identifier" }
> +#if __has_builtin (1 + 2)     // { dg-error "macro '__has_builtin' requires an identifier" }
>  #endif
>  
> -#if __has_builtin (x, y)      // { dg-error "expected '\\\)' after \"x\"" } */
> +#if __has_builtin (x, y)      // { dg-error "expected '\\\)' after 'x'" } */
>  #endif
>  
> -#if __has_builtin (x + 1)     // { dg-error "expected '\\\)' after \"x\"" } */
> +#if __has_builtin (x + 1)     // { dg-error "expected '\\\)' after 'x'" } */
>  #endif
>  
> -#if __has_builtin (p->i)      // { dg-error "expected '\\\)' after \"p\"" } */
> +#if __has_builtin (p->i)      // { dg-error "expected '\\\)' after 'p'" } */
>  #endif
>  
> -#if __has_builtin ((x))       // { dg-error "macro \"__has_builtin\" requires an identifier" }
> +#if __has_builtin ((x))       // { dg-error "macro '__has_builtin' requires an identifier" }
>  #endif
>  
> -#if __has_builtin ((y)        // { dg-error "macro \"__has_builtin\" requires an identifier" }
> +#if __has_builtin ((y)        // { dg-error "macro '__has_builtin' requires an identifier" }
>  #endif
>  
> -#if __has_builtin ((((z)      // { dg-error "macro \"__has_builtin\" requires an identifier" }
> +#if __has_builtin ((((z)      // { dg-error "macro '__has_builtin' requires an identifier" }
>  #endif
>  
>  #if __has_builtin (x)))       // { dg-error "missing '\\\('" }"
>  #endif
>  
> -#if __has_builtin (f ())      // { dg-error "expected '\\\)' after \"f\"" }"
> +#if __has_builtin (f ())      // { dg-error "expected '\\\)' after 'f'" }"
>  #endif
> --- gcc/testsuite/c-c++-common/cpp/line-2.c.jj	2023-06-26 09:27:04.358366387 +0200
> +++ gcc/testsuite/c-c++-common/cpp/line-2.c	2024-09-13 09:58:32.071825072 +0200
> @@ -8,4 +8,4 @@ int line4;
>  
>  // { dg-regexp {In file included from <command-line>:\n[^\n]*/line-2.h:4:2: error: #error wrong\n} }
>  
> -// { dg-regexp {[^\n]*/line-2.c:3:11: error: macro "bill" passed 1 arguments, but takes just 0\n[^\n]*/line-2.h:3:9: note: macro "bill" defined here\n} }
> +// { dg-regexp {[^\n]*/line-2.c:3:11: error: macro 'bill' passed 1 arguments, but takes just 0\n[^\n]*/line-2.h:3:9: note: macro 'bill' defined here\n} }
> --- gcc/testsuite/c-c++-common/cpp/line-3.c.jj	2023-06-26 09:27:04.358366387 +0200
> +++ gcc/testsuite/c-c++-common/cpp/line-3.c	2024-09-13 09:59:07.959328765 +0200
> @@ -15,6 +15,6 @@ int line4;
>  
>  // { dg-regexp {In file included from <command-line>:\n[^\n]*/line-2.h:4:2: error: #error wrong\n} }
>  
> -// { dg-regexp {[^\n]*/line-3.c:3:11: error: macro "bill" passed 1 arguments, but takes just 0\n[^\n]*/line-2.h:3:9: note: macro "bill" defined here\n} }
> +// { dg-regexp {[^\n]*/line-3.c:3:11: error: macro 'bill' passed 1 arguments, but takes just 0\n[^\n]*/line-2.h:3:9: note: macro 'bill' defined here\n} }
>  
>  // { dg-options "-fpreprocessed -fdirectives-only" }
> --- gcc/testsuite/c-c++-common/cpp/macro-arg-count-1.c.jj	2023-06-26 09:27:04.358366387 +0200
> +++ gcc/testsuite/c-c++-common/cpp/macro-arg-count-1.c	2024-09-13 09:59:59.641614027 +0200
> @@ -4,7 +4,7 @@
>  void test_1 ()
>  {
>    MACRO_1(42); /* { dg-line "use_of_MACRO_1" } */
> -  /* { dg-error "macro \"MACRO_1\" requires 2 arguments, but only 1 given" "" { target *-*-* } use_of_MACRO_1 } */
> +  /* { dg-error "macro 'MACRO_1' requires 2 arguments, but only 1 given" "" { target *-*-* } use_of_MACRO_1 } */
>    /* { dg-begin-multiline-output "" }
>     MACRO_1(42);
>               ^
> @@ -28,7 +28,7 @@ void test_1 ()
>  void test_2 ()
>  {
>    MACRO_2(1, 2, 3); /* { dg-line "use_of_MACRO_2" } */
> -  /* { dg-error "macro \"MACRO_2\" passed 3 arguments, but takes just 2" "" { target *-*-* } use_of_MACRO_2 } */
> +  /* { dg-error "macro 'MACRO_2' passed 3 arguments, but takes just 2" "" { target *-*-* } use_of_MACRO_2 } */
>    /* { dg-begin-multiline-output "" }
>     MACRO_2(1, 2, 3);
>                    ^
> --- gcc/testsuite/c-c++-common/cpp/macro-arg-count-2.c.jj	2020-01-14 20:02:46.649611841 +0100
> +++ gcc/testsuite/c-c++-common/cpp/macro-arg-count-2.c	2024-09-13 10:00:41.600033763 +0200
> @@ -4,8 +4,8 @@
>  void test_1 ()
>  {
>    MACRO_1(42); /* { dg-line "use_of_MACRO_1" } */
> -  /* { dg-error "-:macro \"MACRO_1\" requires 2 arguments, but only 1 given" "" { target c } use_of_MACRO_1 } */
> -  /* { dg-error "macro \"MACRO_1\" requires 2 arguments, but only 1 given" "" { target c++ } use_of_MACRO_1 } */
> +  /* { dg-error "-:macro 'MACRO_1' requires 2 arguments, but only 1 given" "" { target c } use_of_MACRO_1 } */
> +  /* { dg-error "macro 'MACRO_1' requires 2 arguments, but only 1 given" "" { target c++ } use_of_MACRO_1 } */
>    /* { dg-message "-: macro .MACRO_1. defined here" "" { target *-*-* } def_of_MACRO_1 } */
>    /* { dg-error "'MACRO_1' was not declared in this scope" "" { target c++ } use_of_MACRO_1 } */
>    /* { dg-bogus "had not yet been defined" "" { target *-*-* } use_of_MACRO_1 } */
> @@ -15,8 +15,8 @@ void test_1 ()
>  void test_2 ()
>  {
>    MACRO_2(1, 2, 3); /* { dg-line "use_of_MACRO_2" } */
> -  /* { dg-error "-:macro \"MACRO_2\" passed 3 arguments, but takes just 2" "" { target c } use_of_MACRO_2 } */
> -  /* { dg-error "macro \"MACRO_2\" passed 3 arguments, but takes just 2" "" { target c++ } use_of_MACRO_2 } */
> +  /* { dg-error "-:macro 'MACRO_2' passed 3 arguments, but takes just 2" "" { target c } use_of_MACRO_2 } */
> +  /* { dg-error "macro 'MACRO_2' passed 3 arguments, but takes just 2" "" { target c++ } use_of_MACRO_2 } */
>    /* { dg-message "-: macro .MACRO_2. defined here" "" { target *-*-* } def_of_MACRO_2 } */
>    /* { dg-error "'MACRO_2' was not declared in this scope" "" { target c++ } use_of_MACRO_2 } */
>    /* { dg-bogus "had not yet been defined" "" { target *-*-* } use_of_MACRO_2 } */
> --- gcc/testsuite/c-c++-common/cpp/macro-ranges.c.jj	2023-06-26 09:27:04.358366387 +0200
> +++ gcc/testsuite/c-c++-common/cpp/macro-ranges.c	2024-09-13 10:02:02.960908579 +0200
> @@ -4,13 +4,13 @@
>  /* Verify that we output range information for diagnostics involving
>     macro definitions.  */
>  
> -#undef __TIME__ /* { dg-warning {undefining "__TIME__"} } */
> +#undef __TIME__ /* { dg-warning {undefining '__TIME__'} } */
>  /* { dg-begin-multiline-output "" }
>   #undef __TIME__
>          ^~~~~~~~
>  /* { dg-end-multiline-output "" } */
>  
> -#define XYZ 123 /* { dg-warning {macro "XYZ" is not used} } */
> +#define XYZ 123 /* { dg-warning {macro 'XYZ' is not used} } */
>  /* { dg-begin-multiline-output "" }
>   #define XYZ 123
>           ^~~
> @@ -19,7 +19,7 @@
>  #define MACRO initial_definition /* { dg-line def_line } */
>  
>  /* This locus is output first for the unused warning... */
> -/* { dg-warning {macro "MACRO" is not used} "" { target *-*-* } def_line } */
> +/* { dg-warning {macro 'MACRO' is not used} "" { target *-*-* } def_line } */
>  /* { dg-begin-multiline-output "" }
>   #define MACRO initial_definition
>           ^~~~~
> @@ -32,20 +32,20 @@
>           ^~~~~
>  /* { dg-end-multiline-output "" } */
>  
> -#define MACRO /* { dg-warning {"MACRO" redefined} } */
> +#define MACRO /* { dg-warning {'MACRO' redefined} } */
>  /* { dg-begin-multiline-output "" }
>   #define MACRO
>           ^~~~~
>  { dg-end-multiline-output "" } */
>  
> -#define MACRO2(x,y) x /* { dg-note {macro "MACRO2" defined here} } */
> +#define MACRO2(x,y) x /* { dg-note {macro 'MACRO2' defined here} } */
>  /* { dg-begin-multiline-output "" }
>   #define MACRO2(x,y)
>           ^~~~~~
>  { dg-end-multiline-output "" } */
>  
>  MACRO2(MACRO, MACRO)
> -MACRO2(MACRO) /* { dg-error {macro "MACRO2" requires 2 arguments, but only 1 given} } */
> +MACRO2(MACRO) /* { dg-error {macro 'MACRO2' requires 2 arguments, but only 1 given} } */
>  /* { dg-begin-multiline-output "" }
>   MACRO2(MACRO)
>               ^
> --- gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-4.c.jj	2022-08-27 23:01:28.319565957 +0200
> +++ gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-4.c	2024-09-13 09:24:42.386871955 +0200
> @@ -9,52 +9,52 @@ typedef __CHAR32_TYPE__ char32_t;
>  #endif
>  
>  const char32_t *a = U"\N{ZERO WIDTH NO BREAK SPACE}";		/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{ZERO WIDTH NO-BREAK SPACE\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{ZERO WIDTH NO-BREAK SPACE\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *b = U"\N{giraffe face}";			/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{GIRAFFE FACE\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{GIRAFFE FACE\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *c = U"\N{Giraffe Face}";			/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{GIRAFFE FACE\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{GIRAFFE FACE\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *d = U"\N{   GiRaFfE_fAcE__ ___}";		/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{GIRAFFE FACE\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{GIRAFFE FACE\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *e = U"\N{GIRAFFE}";				/* { dg-error "is not a valid universal character" } */
>  const char32_t *f = U"\N{Hangul_Syllable_gAgg_}";		/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL SYLLABLE GAGG\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL SYLLABLE GAGG\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *g = U"\N{HANGUL SYLLABLE gagg}";		/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL SYLLABLE GAGG\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL SYLLABLE GAGG\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *h = U"\N{HANGULSYLLABLEGAGG}";			/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL SYLLABLE GAGG\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL SYLLABLE GAGG\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *i = U"\N{HANGUL_SYLLABLE_GAGG}";		/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL SYLLABLE GAGG\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL SYLLABLE GAGG\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *j = U"\N{HANGUL SYLLABLE }";			/* { dg-error "is not a valid universal character" } */
>  const char32_t *k = U"\N{CJK-COMPATIBILITY-IDEOGRAPH-2F801}";	/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{CJK COMPATIBILITY IDEOGRAPH-2F801\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{CJK COMPATIBILITY IDEOGRAPH-2F801\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *l = U"\N{CjK_COMPATIBILITY IDEOGRAPH 2f801}";	/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{CJK COMPATIBILITY IDEOGRAPH-2F801\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{CJK COMPATIBILITY IDEOGRAPH-2F801\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *m = U"\N{CjK_COMPATIBILITY IDEOGRAPH 2f80}";	/* { dg-error "is not a valid universal character" } */
>  const char32_t *n = U"\N{CJK COMPATIBILITY IDEOGRAPH-}";	/* { dg-error "is not a valid universal character" } */
>  const char32_t *o = U"\N{CJK COMPATIBILITY IDEOGRAPH-X}";	/* { dg-error "is not a valid universal character" } */
>  const char32_t *p = U"\N{Tibetan Letter A}";			/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{TIBETAN LETTER A\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{TIBETAN LETTER A\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *q = U"\N{Tibetan LetterA}";			/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{TIBETAN LETTER A\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{TIBETAN LETTER A\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *r = U"\N{Tibetan Letter-A}";			/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{TIBETAN LETTER A\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{TIBETAN LETTER A\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *s = U"\N{Tibetan Letter -A}";			/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{TIBETAN LETTER -A\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{TIBETAN LETTER -A\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *t = U"\N{TibetanLetter  -A}";			/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{TIBETAN LETTER -A\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{TIBETAN LETTER -A\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *u = U"\N{Hangul Jungseong oe}";			/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG OE\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG OE\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *v = U"\N{Hangul Jungseong o- e}";		/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG O-E\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG O-E\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *w = U"\N{HangulJungseongo-e}";			/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG O-E\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG O-E\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *x = U"\N{Hangul Jungseong oe          __   }";	/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG OE\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG OE\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *y = U"\N{Hangul Jungseong o- e     __      }";	/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG O-E\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG O-E\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *z = U"\N{Hangul Jungseong o -e}";		/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG O-E\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG O-E\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *A = U"\N{Hangul Jungseong o -e     __      }";	/* { dg-error "is not a valid universal character" } */
> -								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG O-E\\}\\?" "" { target *-*-* } .-1 } */
> +								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG O-E\\}'\\?" "" { target *-*-* } .-1 } */
>  const char32_t *B = U"\N{O}";					/* { dg-error "is not a valid universal character" } */
> --- gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-5.c.jj	2022-09-07 22:49:17.682000693 +0200
> +++ gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-5.c	2024-09-13 09:26:33.932323932 +0200
> @@ -10,8 +10,8 @@ int b = a\N{});				/* { dg-warning "empt
>  int c = a\N{);				/* { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{; treating it as separate tokens" } */
>  int d = a\N);
>  int e = a\NARG);
> -int f = a\N{abc});				/* { dg-warning "\\\\N\\\{abc\\\} is not a valid universal character; treating it as separate tokens" } */
> +int f = a\N{abc});				/* { dg-warning "'\\\\N\\\{abc\\\}' is not a valid universal character; treating it as separate tokens" } */
>  int g = a\N{ABC.123});				/* { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{ABC; treating it as separate tokens" } */
> -int h = a\N{NON-EXISTENT CHAR});	/* { dg-warning "\\\\N\\\{NON-EXISTENT CHAR\\\} is not a valid universal character; treating it as separate tokens" } */
> -int i = a\N{Latin_Small_Letter_A_With_Acute});	/* { dg-warning "\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\} is not a valid universal character; treating it as separate tokens" } */
> -					/* { dg-message "did you mean \\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}\\?" "" { target *-*-* } .-1 } */
> +int h = a\N{NON-EXISTENT CHAR});	/* { dg-warning "'\\\\N\\\{NON-EXISTENT CHAR\\\}' is not a valid universal character; treating it as separate tokens" } */
> +int i = a\N{Latin_Small_Letter_A_With_Acute});	/* { dg-warning "'\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\}' is not a valid universal character; treating it as separate tokens" } */
> +					/* { dg-message "did you mean '\\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}'\\?" "" { target *-*-* } .-1 } */
> --- gcc/testsuite/c-c++-common/cpp/pr88974.c.jj	2020-02-04 23:03:46.354221933 +0100
> +++ gcc/testsuite/c-c++-common/cpp/pr88974.c	2024-09-13 10:02:34.580471291 +0200
> @@ -2,6 +2,6 @@
>  /* { dg-do preprocess } */
>  
>  #if __has_include (<pr88974.h)
> -/* { dg-error "missing terminating > character" "" { target *-*-* } .-1 } */
> -/* { dg-error "missing '\\\)' after .__has_include. operand" "" { target *-*-* } .-2 } */
> +/* { dg-error "missing terminating '>' character" "" { target *-*-* } .-1 } */
> +/* { dg-error "missing '\\\)' after '__has_include' operand" "" { target *-*-* } .-2 } */
>  #endif
> --- gcc/testsuite/c-c++-common/cpp/va-opt-error.c.jj	2020-01-14 20:02:46.649611841 +0100
> +++ gcc/testsuite/c-c++-common/cpp/va-opt-error.c	2024-09-13 10:13:45.145201935 +0200
> @@ -2,11 +2,11 @@
>  /* { dg-options "-std=gnu99" { target c } } */
>  /* { dg-options "-std=c++2a" { target c++ } } */
>  
> -#define ERR1(x) __VA_OPT__ /* { dg-warning "__VA_OPT__ can only appear" } */
> +#define ERR1(x) __VA_OPT__ /* { dg-warning "'__VA_OPT__' can only appear" } */
>  #define ERR2(x) __VA_OPT__( /* { dg-warning "can only appear" } */
>  #define ERR3(x) __VA_OPT__() /* { dg-warning "can only appear" } */
>  
> -#define ERR4(x,...) __VA_OPT__ /* { dg-error "unterminated __VA_OPT__" } */
> +#define ERR4(x,...) __VA_OPT__ /* { dg-error "unterminated '__VA_OPT__'" } */
>  #define ERR5(x,...) __VA_OPT__( /* { dg-error "unterminated" } */
>  #define ERR6(x,...) __VA_OPT__(() /* { dg-error "unterminated" } */
>  
> --- gcc/testsuite/c-c++-common/cpp/va-opt-pedantic.c.jj	2020-01-14 20:02:46.649611841 +0100
> +++ gcc/testsuite/c-c++-common/cpp/va-opt-pedantic.c	2024-09-13 10:14:04.422935674 +0200
> @@ -2,4 +2,4 @@
>  /* { dg-options "-std=c11 -pedantic-errors" { target c } } */
>  /* { dg-options "-std=c++17 -pedantic-errors" { target c++ } } */
>  
> -#define CALL(F, ...) F (7 __VA_OPT__(,) __VA_ARGS__) /* { dg-error "__VA_OPT__ is not available" } */
> +#define CALL(F, ...) F (7 __VA_OPT__(,) __VA_ARGS__) /* { dg-error "'__VA_OPT__' is not available" } */
> --- gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-1.c.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-1.c	2024-09-13 10:08:32.580520316 +0200
> @@ -4,40 +4,40 @@
>  // { dg-options "-finput-charset=UTF-8 -Winvalid-utf8" }
>  
>  // a?߿ࠀ퟿𐀀?a		{ dg-bogus "invalid UTF-8 character" }
> -// a�a					{ dg-warning "invalid UTF-8 character <80>" }
> -// a�a					{ dg-warning "invalid UTF-8 character <bf>" }
> -// a�a					{ dg-warning "invalid UTF-8 character <c0>" }
> -// a�a					{ dg-warning "invalid UTF-8 character <c1>" }
> -// a�a					{ dg-warning "invalid UTF-8 character <f5>" }
> -// a�a					{ dg-warning "invalid UTF-8 character <ff>" }
> -// a�a					{ dg-warning "invalid UTF-8 character <c2>" }
> -// a�a					{ dg-warning "invalid UTF-8 character <e0>" }
> -// a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" }
> -// a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" }
> -// a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" }
> -// a��a					{ dg-warning "invalid UTF-8 character <ec><80>" }
> -// a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" }
> -// a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" }
> -// a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
> -// a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" }
> -// a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
> -//					{ dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
> +// a�a					{ dg-warning "invalid UTF-8 character '<80>'" }
> +// a�a					{ dg-warning "invalid UTF-8 character '<bf>'" }
> +// a�a					{ dg-warning "invalid UTF-8 character '<c0>'" }
> +// a�a					{ dg-warning "invalid UTF-8 character '<c1>'" }
> +// a�a					{ dg-warning "invalid UTF-8 character '<f5>'" }
> +// a�a					{ dg-warning "invalid UTF-8 character '<ff>'" }
> +// a�a					{ dg-warning "invalid UTF-8 character '<c2>'" }
> +// a�a					{ dg-warning "invalid UTF-8 character '<e0>'" }
> +// a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
> +// a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
> +// a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" }
> +// a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" }
> +// a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
> +// a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
> +// a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
> +// a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" }
> +// a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" }
> +//					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
>  /* a?߿ࠀ퟿𐀀?a		{ dg-bogus "invalid UTF-8 character" } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <80>" } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <bf>" } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <c0>" } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <c1>" } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <f5>" } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <ff>" } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <c2>" } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <e0>" } */
> -/* a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" } */
> -/* a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" } */
> -/* a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" } */
> -/* a��a					{ dg-warning "invalid UTF-8 character <ec><80>" } */
> -/* a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" } */
> -/* a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" } */
> -/* a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" } */
> -/* a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" } */
> -/* a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" } */
> -/*					{ dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<80>'" } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<bf>'" } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<c0>'" } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<c1>'" } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<f5>'" } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<ff>'" } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<c2>'" } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<e0>'" } */
> +/* a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" } */
> +/* a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" } */
> +/* a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" } */
> +/* a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" } */
> +/* a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" } */
> +/* a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" } */
> +/* a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" } */
> +/* a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" } */
> +/* a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" } */
> +/*					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 } */
> --- gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-2.c.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-2.c	2024-09-13 10:09:09.274012870 +0200
> @@ -11,78 +11,78 @@ typedef __CHAR16_TYPE__ char16_t;
>  typedef __CHAR32_TYPE__ char32_t;
>  #endif
>  
> -char32_t a = U'�';				// { dg-warning "invalid UTF-8 character <80>" }
> -char32_t b = U'�';				// { dg-warning "invalid UTF-8 character <bf>" }
> -char32_t c = U'�';				// { dg-warning "invalid UTF-8 character <c0>" }
> -char32_t d = U'�';				// { dg-warning "invalid UTF-8 character <c1>" }
> -char32_t e = U'�';				// { dg-warning "invalid UTF-8 character <f5>" }
> -char32_t f = U'�';				// { dg-warning "invalid UTF-8 character <ff>" }
> -char32_t g = U'�';				// { dg-warning "invalid UTF-8 character <c2>" }
> -char32_t h = U'�';				// { dg-warning "invalid UTF-8 character <e0>" }
> -char32_t i = U'���';				// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
> -char32_t j = U'���';				// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
> -char32_t k = U'��';				// { dg-warning "invalid UTF-8 character <e0><bf>" }
> -char32_t l = U'��';				// { dg-warning "invalid UTF-8 character <ec><80>" }
> -char32_t m = U'���';				// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
> -char32_t n = U'����';				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
> -char32_t o = U'����';				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
> -char32_t p = U'����';				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
> -char32_t q = U'������';				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
> +char32_t a = U'�';				// { dg-warning "invalid UTF-8 character '<80>'" }
> +char32_t b = U'�';				// { dg-warning "invalid UTF-8 character '<bf>'" }
> +char32_t c = U'�';				// { dg-warning "invalid UTF-8 character '<c0>'" }
> +char32_t d = U'�';				// { dg-warning "invalid UTF-8 character '<c1>'" }
> +char32_t e = U'�';				// { dg-warning "invalid UTF-8 character '<f5>'" }
> +char32_t f = U'�';				// { dg-warning "invalid UTF-8 character '<ff>'" }
> +char32_t g = U'�';				// { dg-warning "invalid UTF-8 character '<c2>'" }
> +char32_t h = U'�';				// { dg-warning "invalid UTF-8 character '<e0>'" }
> +char32_t i = U'���';				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
> +char32_t j = U'���';				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
> +char32_t k = U'��';				// { dg-warning "invalid UTF-8 character '<e0><bf>'" }
> +char32_t l = U'��';				// { dg-warning "invalid UTF-8 character '<ec><80>'" }
> +char32_t m = U'���';				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
> +char32_t n = U'����';				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
> +char32_t o = U'����';				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
> +char32_t p = U'����';				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" }
> +char32_t q = U'������';				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
>  const char32_t *A = U"?߿ࠀ퟿𐀀?";	// { dg-bogus "invalid UTF-8 character" }
> -const char32_t *B = U"�";			// { dg-warning "invalid UTF-8 character <80>" }
> -const char32_t *C = U"�";			// { dg-warning "invalid UTF-8 character <bf>" }
> -const char32_t *D = U"�";			// { dg-warning "invalid UTF-8 character <c0>" }
> -const char32_t *E = U"�";			// { dg-warning "invalid UTF-8 character <c1>" }
> -const char32_t *F = U"�";			// { dg-warning "invalid UTF-8 character <f5>" }
> -const char32_t *G = U"�";			// { dg-warning "invalid UTF-8 character <ff>" }
> -const char32_t *H = U"�";			// { dg-warning "invalid UTF-8 character <c2>" }
> -const char32_t *I = U"�";			// { dg-warning "invalid UTF-8 character <e0>" }
> -const char32_t *J = U"���";			// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
> -const char32_t *K = U"���";			// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
> -const char32_t *L = U"��";			// { dg-warning "invalid UTF-8 character <e0><bf>" }
> -const char32_t *M = U"��";			// { dg-warning "invalid UTF-8 character <ec><80>" }
> -const char32_t *N = U"���";			// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
> -const char32_t *O = U"����";			// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
> -const char32_t *P = U"����";			// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
> -const char32_t *Q = U"����";			// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
> -const char32_t *R = U"������";			// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
> +const char32_t *B = U"�";			// { dg-warning "invalid UTF-8 character '<80>'" }
> +const char32_t *C = U"�";			// { dg-warning "invalid UTF-8 character '<bf>'" }
> +const char32_t *D = U"�";			// { dg-warning "invalid UTF-8 character '<c0>'" }
> +const char32_t *E = U"�";			// { dg-warning "invalid UTF-8 character '<c1>'" }
> +const char32_t *F = U"�";			// { dg-warning "invalid UTF-8 character '<f5>'" }
> +const char32_t *G = U"�";			// { dg-warning "invalid UTF-8 character '<ff>'" }
> +const char32_t *H = U"�";			// { dg-warning "invalid UTF-8 character '<c2>'" }
> +const char32_t *I = U"�";			// { dg-warning "invalid UTF-8 character '<e0>'" }
> +const char32_t *J = U"���";			// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
> +const char32_t *K = U"���";			// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
> +const char32_t *L = U"��";			// { dg-warning "invalid UTF-8 character '<e0><bf>'" }
> +const char32_t *M = U"��";			// { dg-warning "invalid UTF-8 character '<ec><80>'" }
> +const char32_t *N = U"���";			// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
> +const char32_t *O = U"����";			// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
> +const char32_t *P = U"����";			// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
> +const char32_t *Q = U"����";			// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" }
> +const char32_t *R = U"������";			// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
>  const char32_t *A1 = UR"(?߿ࠀ퟿𐀀?)"; // { dg-bogus "invalid UTF-8 character" }
> -const char32_t *B1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <80>" }
> -const char32_t *C1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <bf>" }
> -const char32_t *D1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <c0>" }
> -const char32_t *E1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <c1>" }
> -const char32_t *F1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <f5>" }
> -const char32_t *G1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <ff>" }
> -const char32_t *H1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <c2>" }
> -const char32_t *I1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <e0>" }
> -const char32_t *J1 = UR"(??�)";			// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
> -const char32_t *K1 = UR"(���)";			// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
> -const char32_t *L1 = UR"(��)";			// { dg-warning "invalid UTF-8 character <e0><bf>" }
> -const char32_t *M1 = UR"(��)";			// { dg-warning "invalid UTF-8 character <ec><80>" }
> -const char32_t *N1 = UR"(���)";			// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
> -const char32_t *O1 = UR"(����)";		// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
> -const char32_t *P1 = UR"(����)";		// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
> -const char32_t *Q1 = UR"(����)";		// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
> -const char32_t *R1 = UR"(������)";		// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
> +const char32_t *B1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<80>'" }
> +const char32_t *C1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<bf>'" }
> +const char32_t *D1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<c0>'" }
> +const char32_t *E1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<c1>'" }
> +const char32_t *F1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<f5>'" }
> +const char32_t *G1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<ff>'" }
> +const char32_t *H1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<c2>'" }
> +const char32_t *I1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<e0>'" }
> +const char32_t *J1 = UR"(���)";			// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
> +const char32_t *K1 = UR"(���)";			// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
> +const char32_t *L1 = UR"(��)";			// { dg-warning "invalid UTF-8 character '<e0><bf>'" }
> +const char32_t *M1 = UR"(��)";			// { dg-warning "invalid UTF-8 character '<ec><80>'" }
> +const char32_t *N1 = UR"(���)";			// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
> +const char32_t *O1 = UR"(����)";		// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
> +const char32_t *P1 = UR"(����)";		// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
> +const char32_t *Q1 = UR"(����)";		// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" }
> +const char32_t *R1 = UR"(������)";		// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
>  const char *A2 = u8"?߿ࠀ퟿𐀀?";	// { dg-bogus "invalid UTF-8 character" }
> -const char *B2 = u8"�";				// { dg-warning "invalid UTF-8 character <80>" }
> -const char *C2 = u8"�";				// { dg-warning "invalid UTF-8 character <bf>" }
> -const char *D2 = u8"�";				// { dg-warning "invalid UTF-8 character <c0>" }
> -const char *E2 = u8"�";				// { dg-warning "invalid UTF-8 character <c1>" }
> -const char *F2 = u8"�";				// { dg-warning "invalid UTF-8 character <f5>" }
> -const char *G2 = u8"�";				// { dg-warning "invalid UTF-8 character <ff>" }
> -const char *H2 = u8"�";				// { dg-warning "invalid UTF-8 character <c2>" }
> -const char *I2 = u8"�";				// { dg-warning "invalid UTF-8 character <e0>" }
> -const char *J2 = u8"���";			// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
> -const char *K2 = u8"���";			// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
> -const char *L2 = u8"��";			// { dg-warning "invalid UTF-8 character <e0><bf>" }
> -const char *M2 = u8"��";			// { dg-warning "invalid UTF-8 character <ec><80>" }
> -const char *N2 = u8"���";			// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
> -const char *O2 = u8"����";			// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
> -const char *P2 = u8"����";			// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
> -const char *Q2 = u8"����";			// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
> -const char *R2 = u8"������";			// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
> +const char *B2 = u8"�";				// { dg-warning "invalid UTF-8 character '<80>'" }
> +const char *C2 = u8"�";				// { dg-warning "invalid UTF-8 character '<bf>'" }
> +const char *D2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c0>'" }
> +const char *E2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c1>'" }
> +const char *F2 = u8"�";				// { dg-warning "invalid UTF-8 character '<f5>'" }
> +const char *G2 = u8"�";				// { dg-warning "invalid UTF-8 character '<ff>'" }
> +const char *H2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c2>'" }
> +const char *I2 = u8"�";				// { dg-warning "invalid UTF-8 character '<e0>'" }
> +const char *J2 = u8"���";			// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
> +const char *K2 = u8"���";			// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
> +const char *L2 = u8"��";			// { dg-warning "invalid UTF-8 character '<e0><bf>'" }
> +const char *M2 = u8"��";			// { dg-warning "invalid UTF-8 character '<ec><80>'" }
> +const char *N2 = u8"��?";			// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
> +const char *O2 = u8"����";			// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
> +const char *P2 = u8"����";			// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
> +const char *Q2 = u8"����";			// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" }
> +const char *R2 = u8"������";			// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
> --- gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-3.c.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-3.c	2024-09-13 10:09:24.901796747 +0200
> @@ -6,22 +6,22 @@
>  #define I(x)
>  I(?߿ࠀ퟿𐀀?)	// { dg-bogus "invalid UTF-8 character" }
>                                  // { dg-error "is not valid in an identifier" "" { target c++ } .-1 }
> -I(�)				// { dg-warning "invalid UTF-8 character <80>" }
> -I(�)				// { dg-warning "invalid UTF-8 character <bf>" }
> -I(�)				// { dg-warning "invalid UTF-8 character <c0>" }
> -I(�)				// { dg-warning "invalid UTF-8 character <c1>" }
> -I(�)				// { dg-warning "invalid UTF-8 character <f5>" }
> -I(�)				// { dg-warning "invalid UTF-8 character <ff>" }
> -I(�)				// { dg-warning "invalid UTF-8 character <c2>" }
> -I(�)				// { dg-warning "invalid UTF-8 character <e0>" }
> -I(���)				// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
> -I(���)				// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
> -I(��)				// { dg-warning "invalid UTF-8 character <e0><bf>" }
> -I(��)				// { dg-warning "invalid UTF-8 character <ec><80>" }
> -I(���)				// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
> -I(����)				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
> -I(����)				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
> -I(����)				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<80>'" }
> +I(�)				// { dg-warning "invalid UTF-8 character '<bf>'" }
> +I(�)				// { dg-warning "invalid UTF-8 character '<c0>'" }
> +I(�)				// { dg-warning "invalid UTF-8 character '<c1>'" }
> +I(�)				// { dg-warning "invalid UTF-8 character '<f5>'" }
> +I(�)				// { dg-warning "invalid UTF-8 character '<ff>'" }
> +I(�)				// { dg-warning "invalid UTF-8 character '<c2>'" }
> +I(�)				// { dg-warning "invalid UTF-8 character '<e0>'" }
> +I(���)				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
> +I(���)				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
> +I(��)				// { dg-warning "invalid UTF-8 character '<e0><bf>'" }
> +I(��)				// { dg-warning "invalid UTF-8 character '<ec><80>'" }
> +I(���)				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
> +I(����)				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
> +I(����)				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
> +I(����)				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c } }
>                                  // { dg-error "is not valid in an identifier" "" { target c++ } .-1 }
> -I(������)			// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c } }
> +I(������)			// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c } }
>                                  // { dg-error "is not valid in an identifier" "" { target c++ } .-1 }
> --- gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-1.c.jj	2023-03-27 22:36:52.329403025 +0200
> +++ gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-1.c	2024-09-13 10:14:54.567243094 +0200
> @@ -16,8 +16,8 @@
>         { dg-final { scan-sarif-file "\"level\": \"warning\"" } }
>         { dg-final { scan-sarif-file "\"ruleId\": \"-Winvalid-utf8\"" } }
>         { dg-final { scan-sarif-file "\"message\": " } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <98>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <99>"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<98>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<99>'"} } }
>  */
> --- gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-3.c.jj	2023-03-27 22:36:52.329403025 +0200
> +++ gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-3.c	2024-09-13 10:15:36.210667932 +0200
> @@ -54,42 +54,42 @@
>         { dg-final { scan-sarif-file "\"level\": \"warning\"" } }
>         { dg-final { scan-sarif-file "\"ruleId\": \"-Winvalid-utf8\"" } }
>         { dg-final { scan-sarif-file "\"message\": " } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c0>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c1>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f5>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ff>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c2>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><80><bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><9f><80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ec><80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ed><a0><80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f0><80><80><80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f0><8f><bf><bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f4><90><80><80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <fd><bf><bf><bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c0>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c1>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f5>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ff>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c2>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><80><bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><9f><80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ec><80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ed><a0><80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f0><80><80><80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f0><8f><bf><bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f4><90><80><80>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <fd><bf><bf><bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
> -         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c0>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c1>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f5>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ff>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c2>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><80><bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><9f><80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ec><80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ed><a0><80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f0><80><80><80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f0><8f><bf><bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f4><90><80><80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<fd><bf><bf><bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c0>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c1>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f5>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ff>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c2>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><80><bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><9f><80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ec><80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ed><a0><80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f0><80><80><80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f0><8f><bf><bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f4><90><80><80>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<fd><bf><bf><bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
> +         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
>  */
> --- gcc/testsuite/c-c++-common/pr68833-3.c.jj	2020-01-14 20:02:46.668611556 +0100
> +++ gcc/testsuite/c-c++-common/pr68833-3.c	2024-09-13 10:20:26.529658154 +0200
> @@ -2,6 +2,6 @@
>  /* { dg-do preprocess } */
>  /* { dg-options "-Werror=normalized" } */
>  
> -\u0F43  // { dg-error "`.U00000f43' is not in NFC .-Werror=normalized=." }
> +\u0F43  // { dg-error "'.U00000f43' is not in NFC .-Werror=normalized=." }
>  
>  /* { dg-prune-output "treated as errors" } */
> --- gcc/testsuite/c-c++-common/raw-string-directive-1.c.jj	2022-11-05 20:51:33.396159443 +0100
> +++ gcc/testsuite/c-c++-common/raw-string-directive-1.c	2024-09-13 11:04:41.242185607 +0200
> @@ -32,19 +32,19 @@ line12
>  )"
>  
>  #if R"(line 13 /* { dg-error "line13" } */
> -file:35:1: error: line14)" /* { dg-error "line14\\)\"\" is not valid" } */
> -#endif R"(line 15 /* { dg-warning "extra tokens at end of #endif" } */
> +file:35:1: error: line14)"
> +#endif R"(line 15 /* { dg-warning "extra tokens at end of '#endif'" } */
>  \
>  line16)" ""
>  
> -#ifdef XYZ R"(line17 /* { dg-warning "extra tokens at end of #ifdef" } */
> +#ifdef XYZ R"(line17 /* { dg-warning "extra tokens at end of '#ifdef'" } */
>  \
>  \
>  line18)"
>  #endif
>  
>  #if 1
> -#else R"(line23 /* { dg-warning "extra tokens at end of #else" } */
> +#else R"(line23 /* { dg-warning "extra tokens at end of '#else'" } */
>  \
>  
>  line24)"
> @@ -52,7 +52,7 @@ line24)"
>  
>  #if 0
>  #elif R"(line 25 /* { dg-error "line25" } */
> -file:55:1: error: line26)" /* { dg-error "line26\\)\"\" is not valid" } */
> +file:55:1: error: line26)"
>  #endif
>  
>  #line 60 R"(file:60:1: warning: this file has a space
> @@ -61,13 +61,13 @@ in it!)"
>  /* { dg-warning "this file has a space" "#line check" { target *-*-* } 60 } */
>  #line 63 "file"
>  
> -#undef X1 R"(line28 /* { dg-warning "extra tokens at end of #undef" } */
> +#undef X1 R"(line28 /* { dg-warning "extra tokens at end of '#undef'" } */
>  line29
>  \
>  )"
>  
>  #ident R"(line30
> -line31)" R"(line 32 /* { dg-warning "extra tokens at end of #ident" } */
> +line31)" R"(line 32 /* { dg-warning "extra tokens at end of '#ident'" } */
>  line 33)"
>  
>  #pragma GCC diagnostic ignored R"(-Woption /* { dg-warning "-Wpragmas" } */
> --- gcc/testsuite/gcc.dg/analyzer/named-constants-Wunused-macros.c.jj	2022-11-17 22:10:05.811657288 +0100
> +++ gcc/testsuite/gcc.dg/analyzer/named-constants-Wunused-macros.c	2024-09-13 09:14:54.198038830 +0200
> @@ -7,9 +7,9 @@
>  
>  /* Various constants used by the fd state machine.  */
>  
> -#define O_ACCMODE 42   /* { dg-warning "-: macro \"O_ACCMODE\" is not used" } */
> -#define O_RDONLY  0x1  /* { dg-warning "-: macro \"O_RDONLY\" is not used" } */
> -#define O_WRONLY  010  /* { dg-warning "-: macro \"O_WRONLY\" is not used" } */
> +#define O_ACCMODE 42   /* { dg-warning "-: macro 'O_ACCMODE' is not used" } */
> +#define O_RDONLY  0x1  /* { dg-warning "-: macro 'O_RDONLY' is not used" } */
> +#define O_WRONLY  010  /* { dg-warning "-: macro 'O_WRONLY' is not used" } */
>  
>  void test_sm_fd_constants (void)
>  {
> --- gcc/testsuite/gcc.dg/binary-constants-4.c.jj	2020-01-14 20:02:47.225603213 +0100
> +++ gcc/testsuite/gcc.dg/binary-constants-4.c	2024-09-13 11:36:25.100157383 +0200
> @@ -11,8 +11,8 @@ foo(void)
>    int i;
>  
>    d = 0b1101;
> -  d = 0b1101p1; /* { dg-error "invalid suffix \"p1\" on integer constant" } */
> +  d = 0b1101p1; /* { dg-error "invalid suffix 'p1' on integer constant" } */
>    d = 0x1101p1;
> -  i = 0b3011;   /* { dg-error "invalid suffix \"b3011\" on integer constant" } */
> -  i = 0b113;    /* { dg-error "invalid digit \"3\" in binary constant" } */
> +  i = 0b3011;   /* { dg-error "invalid suffix 'b3011' on integer constant" } */
> +  i = 0b113;    /* { dg-error "invalid digit '3' in binary constant" } */
>  }
> --- gcc/testsuite/gcc.dg/builtin-redefine.c.jj	2023-06-26 09:27:04.362366331 +0200
> +++ gcc/testsuite/gcc.dg/builtin-redefine.c	2024-09-13 10:19:53.097119913 +0200
> @@ -27,7 +27,7 @@
>  #define __TIME__ "X"         /* Define while undefined.  */
>  #define __TIME__ "X"         /* Re-define while defined.  */ /* { dg-line time_prev } */
>  
> -#define __TIME__ "Y"         /* { dg-warning "\"__TIME__\" redefined" } */
> +#define __TIME__ "Y"         /* { dg-warning "'__TIME__' redefined" } */
>  /* { dg-message "previous definition" "" { target *-*-* } time_prev } */
>  
>  #undef __TIME__              /* Undefine while defined.  */
> @@ -38,7 +38,7 @@
>  #define __DATE__ "X"         /* Define while undefined.  */
>  #define __DATE__ "X"         /* Re-define while defined.  */ /* { dg-line date_prev } */
>  
> -#define __DATE__ "Y"         /* { dg-warning "\"__DATE__\" redefined" } */
> +#define __DATE__ "Y"         /* { dg-warning "'__DATE__' redefined" } */
>  /* { dg-message "previous definition" "" { target *-*-* } date_prev } */
>  
>  #undef __DATE__              /* Undefine while defined.  */
> @@ -47,7 +47,7 @@
>  #define __TIMESTAMP__ "X"    /* Define while already defined.  */
>  #define __TIMESTAMP__ "X"    /* Re-define while defined.  */ /* { dg-line timestamp_prev } */
>  
> -#define __TIMESTAMP__ "Y"    /* { dg-warning "\"__TIMESTAMP__\" redefined" } */
> +#define __TIMESTAMP__ "Y"    /* { dg-warning "'__TIMESTAMP__' redefined" } */
>  /* { dg-message "previous definition" "" { target *-*-* } timestamp_prev } */
>  
>  #undef __TIMESTAMP__         /* Undefine while defined.  */
> @@ -71,9 +71,9 @@
>  /* { dg-bogus "Expected built-in is not defined" "" { target *-*-* } .-1 } */
>  #endif
>  
> -#define __LINE__ 0           /* { dg-warning "\"__LINE__\" redef" } */
> -#define __INCLUDE_LEVEL__ 0  /* { dg-warning "\"__INCLUDE_LEVEL__\" redef" } */
> -#define __COUNTER__ 0        /* { dg-warning "\"__COUNTER__\" redef" } */
> +#define __LINE__ 0           /* { dg-warning "'__LINE__' redef" } */
> +#define __INCLUDE_LEVEL__ 0  /* { dg-warning "'__INCLUDE_LEVEL__' redef" } */
> +#define __COUNTER__ 0        /* { dg-warning "'__COUNTER__' redef" } */
>  
>  
>  int unused;  /* Silence `ISO C forbids an empty translation unit' warning.  */
> --- gcc/testsuite/gcc.dg/cpp/19951025-1.c.jj	2020-01-14 20:02:47.250602839 +0100
> +++ gcc/testsuite/gcc.dg/cpp/19951025-1.c	2024-09-13 09:15:40.657393073 +0200
> @@ -1,4 +1,4 @@
>  /* { dg-do preprocess } */
> -/* { dg-error "include expects" "include" { target *-*-* } .+2 } */
> +/* { dg-error "'#include' expects" "include" { target *-*-* } .+2 } */
>  /* { dg-error "newline at end" "newline" { target *-*-* } .+1 } */
>  #include /\
> --- gcc/testsuite/gcc.dg/cpp/c11-warning-1.c.jj	2023-11-07 23:15:16.676412791 +0100
> +++ gcc/testsuite/gcc.dg/cpp/c11-warning-1.c	2024-09-13 09:16:12.268953690 +0200
> @@ -3,4 +3,4 @@
>  /* { dg-options "-std=c11 -pedantic-errors" } */
>  
>  #warning example text /* { dg-warning "example text" } */
> -/* { dg-error "#warning before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
> +/* { dg-error "'#warning' before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
> --- gcc/testsuite/gcc.dg/cpp/c11-warning-2.c.jj	2023-11-07 23:15:16.676412791 +0100
> +++ gcc/testsuite/gcc.dg/cpp/c11-warning-2.c	2024-09-13 09:16:26.440756713 +0200
> @@ -3,4 +3,4 @@
>  /* { dg-options "-std=c11 -pedantic" } */
>  
>  #warning example text /* { dg-warning "example text" } */
> -/* { dg-warning "#warning before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
> +/* { dg-warning "'#warning' before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
> --- gcc/testsuite/gcc.dg/cpp/c11-warning-3.c.jj	2023-11-07 23:15:16.676412791 +0100
> +++ gcc/testsuite/gcc.dg/cpp/c11-warning-3.c	2024-09-13 09:16:40.989554490 +0200
> @@ -3,4 +3,4 @@
>  /* { dg-options "-std=c11 -Wc11-c23-compat" } */
>  
>  #warning example text /* { dg-warning "example text" } */
> -/* { dg-warning "#warning before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
> +/* { dg-warning "'#warning' before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
> --- gcc/testsuite/gcc.dg/cpp/c23-elifdef-2.c.jj	2023-11-08 23:04:12.263052031 +0100
> +++ gcc/testsuite/gcc.dg/cpp/c23-elifdef-2.c	2024-09-13 09:28:39.447584387 +0200
> @@ -5,53 +5,53 @@
>  #define A
>  #undef B
>  
> -#elifdef A /* { dg-error "#elifdef without #if" } */
> -#elifdef B /* { dg-error "#elifdef without #if" } */
> -#elifndef A /* { dg-error "#elifndef without #if" } */
> -#elifndef B /* { dg-error "#elifndef without #if" } */
> +#elifdef A /* { dg-error "'#elifdef' without '#if'" } */
> +#elifdef B /* { dg-error "'#elifdef' without '#if'" } */
> +#elifndef A /* { dg-error "'#elifndef' without '#if'" } */
> +#elifndef B /* { dg-error "'#elifndef' without '#if'" } */
>  
>  #if 1 /* { dg-error "-:began here" } */
>  #else
> -#elifdef A /* { dg-error "#elifdef after #else" } */
> +#elifdef A /* { dg-error "'#elifdef' after '#else'" } */
>  #endif
>  
>  #if 1 /* { dg-error "-:began here" } */
>  #else
> -#elifdef B /* { dg-error "#elifdef after #else" } */
> +#elifdef B /* { dg-error "'#elifdef' after '#else'" } */
>  #endif
>  
>  #if 1 /* { dg-error "-:began here" } */
>  #else
> -#elifndef A /* { dg-error "#elifndef after #else" } */
> +#elifndef A /* { dg-error "'#elifndef' after '#else'" } */
>  #endif
>  
>  #if 1 /* { dg-error "-:began here" } */
>  #else
> -#elifndef B /* { dg-error "#elifndef after #else" } */
> +#elifndef B /* { dg-error "'#elifndef' after '#else'" } */
>  #endif
>  
>  #if 0
> -#elifdef A = /* { dg-error "extra tokens at end of #elifdef directive" } */
> +#elifdef A = /* { dg-error "extra tokens at end of '#elifdef' directive" } */
>  #endif
>  
>  #if 0
> -#elifdef B = /* { dg-error "extra tokens at end of #elifdef directive" } */
> +#elifdef B = /* { dg-error "extra tokens at end of '#elifdef' directive" } */
>  #endif
>  
>  #if 0
> -#elifndef A = /* { dg-error "extra tokens at end of #elifndef directive" } */
> +#elifndef A = /* { dg-error "extra tokens at end of '#elifndef' directive" } */
>  #endif
>  
>  #if 0
> -#elifndef B = /* { dg-error "extra tokens at end of #elifndef directive" } */
> +#elifndef B = /* { dg-error "extra tokens at end of '#elifndef' directive" } */
>  #endif
>  
>  #if 0
> -#elifdef /* { dg-error "no macro name given in #elifdef directive" } */
> +#elifdef /* { dg-error "no macro name given in '#elifdef' directive" } */
>  #endif
>  
>  #if 0
> -#elifndef /* { dg-error "no macro name given in #elifndef directive" } */
> +#elifndef /* { dg-error "no macro name given in '#elifndef' directive" } */
>  #endif
>  
>  #if 0
> --- gcc/testsuite/gcc.dg/cpp/c23-warning-2.c.jj	2023-11-08 23:04:12.263052031 +0100
> +++ gcc/testsuite/gcc.dg/cpp/c23-warning-2.c	2024-09-13 09:17:09.058164353 +0200
> @@ -3,4 +3,4 @@
>  /* { dg-options "-std=c23 -pedantic-errors -Wc11-c23-compat" } */
>  
>  #warning example text /* { dg-warning "example text" } */
> -/* { dg-warning "#warning before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
> +/* { dg-warning "'#warning' before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
> --- gcc/testsuite/gcc.dg/cpp/embed-2.c.jj	2024-09-12 23:12:54.032424102 +0200
> +++ gcc/testsuite/gcc.dg/cpp/embed-2.c	2024-09-13 09:29:05.961216955 +0200
> @@ -6,7 +6,7 @@
>  #endif
>  
>  int a =
> -#embed __FILE__ limit (1) /* { dg-error "#embed before C23 is a GCC extension" } */
> +#embed __FILE__ limit (1) /* { dg-error "'#embed' before C23 is a GCC extension" } */
>  ;
>  int b =
>  (__extension__
> --- gcc/testsuite/gcc.dg/cpp/embed-3.c.jj	2024-09-12 23:12:54.033424088 +0200
> +++ gcc/testsuite/gcc.dg/cpp/embed-3.c	2024-09-13 09:29:23.330976243 +0200
> @@ -6,7 +6,7 @@
>  #endif
>  
>  int a =
> -#embed __FILE__ limit (1) /* { dg-warning "#embed before C23 is a GCC extension" } */
> +#embed __FILE__ limit (1) /* { dg-warning "'#embed' before C23 is a GCC extension" } */
>  ;
>  int b =
>  (__extension__
> --- gcc/testsuite/gcc.dg/cpp/embed-4.c.jj	2024-09-12 23:12:54.033424088 +0200
> +++ gcc/testsuite/gcc.dg/cpp/embed-4.c	2024-09-13 09:30:18.055217866 +0200
> @@ -4,10 +4,10 @@
>  #if __has_embed(__FILE__ limit(6))
>  #endif
>  /* { dg-error "-:'__has_embed' not supported in traditional C" "" { target *-*-* } .-2 } */
> -/* { dg-error "-:missing binary operator before token \\\"\\\(\\\"" "" { target *-*-* } .-3 } */
> +/* { dg-error "-:missing binary operator before token '\\\('" "" { target *-*-* } .-3 } */
>  #define FOO 20000,20001,20002
>  #define BAR 30000,30001,30002
>  #embed __FILE__ limit (4) prefix(10000,10001,10002+) suffix(+10003,10004,10005)
> -/* { dg-error "-:#embed not supported in traditional C" "" { target *-*-* } .-1 } */
> +/* { dg-error "-:'#embed' not supported in traditional C" "" { target *-*-* } .-1 } */
>  #embed __FILE__ limit (6) prefix(FOO,) suffix(,BAR)
> -/* { dg-error "-:#embed not supported in traditional C" "" { target *-*-* } .-1 } */
> +/* { dg-error "-:'#embed' not supported in traditional C" "" { target *-*-* } .-1 } */
> --- gcc/testsuite/gcc.dg/cpp/expr.c.jj	2023-11-28 23:02:11.787089470 +0100
> +++ gcc/testsuite/gcc.dg/cpp/expr.c	2024-09-13 09:30:50.835763588 +0200
> @@ -9,27 +9,27 @@
>  
>  /* Neil Booth, 19 Jul 2002.  */
>  
> -#if (1 ? -2: 0 + 1U) < 0 /* { dg-warning {the left operand of ":" changes sign} } */
> +#if (1 ? -2: 0 + 1U) < 0 /* { dg-warning {the left operand of ':' changes sign} } */
>  #error				/* { dg-bogus "error" } */
>  #endif
>  
> -#if (0 ? 0 + 1U: -2) < 0 /* { dg-warning {the right operand of ":" changes sign} } */
> +#if (0 ? 0 + 1U: -2) < 0 /* { dg-warning {the right operand of ':' changes sign} } */
>  #error				/* { dg-bogus "error" } */
>  #endif
>  
>  /* PR preprocessor/112701 */
> -#if (0 ? 0/0u : -1) < 0 /* { dg-warning {the right operand of ":" changes sign} } */
> +#if (0 ? 0/0u : -1) < 0 /* { dg-warning {the right operand of ':' changes sign} } */
>  #error /* { dg-bogus "error" } */
>  #endif
>  
> -#if (0 ? 0u/0 : -1) < 0 /* { dg-warning {the right operand of ":" changes sign} } */
> +#if (0 ? 0u/0 : -1) < 0 /* { dg-warning {the right operand of ':' changes sign} } */
>  #error /* { dg-bogus "error" } */
>  #endif
>  
> -#if (1 ? -1 : 0/0u) < 0 /* { dg-warning {the left operand of ":" changes sign} } */
> +#if (1 ? -1 : 0/0u) < 0 /* { dg-warning {the left operand of ':' changes sign} } */
>  #error /* { dg-bogus "error" } */
>  #endif
>  
> -#if (1 ? -1 : 0u/0) < 0 /* { dg-warning {the left operand of ":" changes sign} } */
> +#if (1 ? -1 : 0u/0) < 0 /* { dg-warning {the left operand of ':' changes sign} } */
>  #error /* { dg-bogus "error" } */
>  #endif
> --- gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-2.c.jj	2021-10-07 23:03:44.118934628 +0200
> +++ gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-2.c	2024-09-13 09:32:47.910141161 +0200
> @@ -5,53 +5,53 @@
>  #define A
>  #undef B
>  
> -#elifdef A /* { dg-error "#elifdef without #if" } */
> -#elifdef B /* { dg-error "#elifdef without #if" } */
> -#elifndef A /* { dg-error "#elifndef without #if" } */
> -#elifndef B /* { dg-error "#elifndef without #if" } */
> +#elifdef A /* { dg-error "'#elifdef' without '#if'" } */
> +#elifdef B /* { dg-error "'#elifdef' without '#if'" } */
> +#elifndef A /* { dg-error "'#elifndef' without '#if'" } */
> +#elifndef B /* { dg-error "'#elifndef' without '#if'" } */
>  
>  #if 1 /* { dg-error "-:began here" } */
>  #else
> -#elifdef A /* { dg-error "#elifdef after #else" } */
> +#elifdef A /* { dg-error "'#elifdef' after '#else'" } */
>  #endif
>  
>  #if 1 /* { dg-error "-:began here" } */
>  #else
> -#elifdef B /* { dg-error "#elifdef after #else" } */
> +#elifdef B /* { dg-error "'#elifdef' after '#else'" } */
>  #endif
>  
>  #if 1 /* { dg-error "-:began here" } */
>  #else
> -#elifndef A /* { dg-error "#elifndef after #else" } */
> +#elifndef A /* { dg-error "'#elifndef' after '#else'" } */
>  #endif
>  
>  #if 1 /* { dg-error "-:began here" } */
>  #else
> -#elifndef B /* { dg-error "#elifndef after #else" } */
> +#elifndef B /* { dg-error "'#elifndef' after '#else'" } */
>  #endif
>  
>  #if 0
> -#elifdef A = /* { dg-warning "extra tokens at end of #elifdef directive" } */
> +#elifdef A = /* { dg-warning "extra tokens at end of '#elifdef' directive" } */
>  #endif
>  
>  #if 0
> -#elifdef B = /* { dg-warning "extra tokens at end of #elifdef directive" } */
> +#elifdef B = /* { dg-warning "extra tokens at end of '#elifdef' directive" } */
>  #endif
>  
>  #if 0
> -#elifndef A = /* { dg-warning "extra tokens at end of #elifndef directive" } */
> +#elifndef A = /* { dg-warning "extra tokens at end of '#elifndef' directive" } */
>  #endif
>  
>  #if 0
> -#elifndef B = /* { dg-warning "extra tokens at end of #elifndef directive" } */
> +#elifndef B = /* { dg-warning "extra tokens at end of '#elifndef' directive" } */
>  #endif
>  
>  #if 0
> -#elifdef /* { dg-error "no macro name given in #elifdef directive" } */
> +#elifdef /* { dg-error "no macro name given in '#elifdef' directive" } */
>  #endif
>  
>  #if 0
> -#elifndef /* { dg-error "no macro name given in #elifndef directive" } */
> +#elifndef /* { dg-error "no macro name given in '#elifndef' directive" } */
>  #endif
>  
>  #if 0
> --- gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-3.c.jj	2023-11-07 23:15:16.676412791 +0100
> +++ gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-3.c	2024-09-13 09:33:40.750408891 +0200
> @@ -6,7 +6,7 @@
>  #undef B
>  
>  #if 0
> -#elifdef A	/* { dg-warning "#elifdef before C23 is a GCC extension" } */
> +#elifdef A	/* { dg-warning "'#elifdef' before C23 is a GCC extension" } */
>  #define M1 1
>  #endif
>  
> @@ -25,7 +25,7 @@
>  #endif
>  
>  #if 0
> -#elifndef B	/* { dg-warning "#elifndef before C23 is a GCC extension" } */
> +#elifndef B	/* { dg-warning "'#elifndef' before C23 is a GCC extension" } */
>  #define M2 2
>  #endif
>  
> @@ -34,32 +34,32 @@
>  #endif
>  
>  #if 0
> -#elifdef A	/* { dg-warning "#elifdef before C23 is a GCC extension" } */
> +#elifdef A	/* { dg-warning "'#elifdef' before C23 is a GCC extension" } */
>  #else
>  #error "#elifdef A did not apply"
>  #endif
>  
>  #if 0
> -#elifndef B	/* { dg-warning "#elifndef before C23 is a GCC extension" } */
> +#elifndef B	/* { dg-warning "'#elifndef' before C23 is a GCC extension" } */
>  #else
>  #error "#elifndef B did not apply"
>  #endif
>  
>  #if 1
> -#elifdef A	/* { dg-warning "#elifdef before C23 is a GCC extension" } */
> +#elifdef A	/* { dg-warning "'#elifdef' before C23 is a GCC extension" } */
>  #endif
>  
>  #if 1
> -#elifndef B	/* { dg-warning "#elifndef before C23 is a GCC extension" } */
> +#elifndef B	/* { dg-warning "'#elifndef' before C23 is a GCC extension" } */
>  #endif
>  
>  /* As with #elif, the syntax of the new directives is relaxed after a
>     non-skipped group.  */
>  
>  #if 1
> -#elifdef x * y	/* { dg-warning "#elifdef before C23 is a GCC extension" } */
> +#elifdef x * y	/* { dg-warning "'#elifdef' before C23 is a GCC extension" } */
>  #endif
>  
>  #if 1
> -#elifndef !	/* { dg-warning "#elifndef before C23 is a GCC extension" } */
> +#elifndef !	/* { dg-warning "'#elifndef' before C23 is a GCC extension" } */
>  #endif
> --- gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-4.c.jj	2023-11-07 23:15:16.676412791 +0100
> +++ gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-4.c	2024-09-13 09:34:33.057684009 +0200
> @@ -6,7 +6,7 @@
>  #undef B
>  
>  #if 0
> -#elifdef A	/* { dg-error "#elifdef before C23 is a GCC extension" } */
> +#elifdef A	/* { dg-error "'#elifdef' before C23 is a GCC extension" } */
>  #define M1 1
>  #endif
>  
> @@ -25,7 +25,7 @@
>  #endif
>  
>  #if 0
> -#elifndef B	/* { dg-error "#elifndef before C23 is a GCC extension" } */
> +#elifndef B	/* { dg-error "'#elifndef' before C23 is a GCC extension" } */
>  #define M2 2
>  #endif
>  
> @@ -34,32 +34,32 @@
>  #endif
>  
>  #if 0
> -#elifdef A	/* { dg-error "#elifdef before C23 is a GCC extension" } */
> +#elifdef A	/* { dg-error "'#elifdef' before C23 is a GCC extension" } */
>  #else
>  #error "#elifdef A did not apply"
>  #endif
>  
>  #if 0
> -#elifndef B	/* { dg-error "#elifndef before C23 is a GCC extension" } */
> +#elifndef B	/* { dg-error "'#elifndef' before C23 is a GCC extension" } */
>  #else
>  #error "#elifndef B did not apply"
>  #endif
>  
>  #if 1
> -#elifdef A	/* { dg-error "#elifdef before C23 is a GCC extension" } */
> +#elifdef A	/* { dg-error "'#elifdef' before C23 is a GCC extension" } */
>  #endif
>  
>  #if 1
> -#elifndef B	/* { dg-error "#elifndef before C23 is a GCC extension" } */
> +#elifndef B	/* { dg-error "'#elifndef' before C23 is a GCC extension" } */
>  #endif
>  
>  /* As with #elif, the syntax of the new directives is relaxed after a
>     non-skipped group.  */
>  
>  #if 1
> -#elifdef x * y	/* { dg-error "#elifdef before C23 is a GCC extension" } */
> +#elifdef x * y	/* { dg-error "'#elifdef' before C23 is a GCC extension" } */
>  #endif
>  
>  #if 1
> -#elifndef !	/* { dg-error "#elifndef before C23 is a GCC extension" } */
> +#elifndef !	/* { dg-error "'#elifndef' before C23 is a GCC extension" } */
>  #endif
> --- gcc/testsuite/gcc.dg/cpp/gnu11-warning-1.c.jj	2023-11-07 23:15:16.676412791 +0100
> +++ gcc/testsuite/gcc.dg/cpp/gnu11-warning-1.c	2024-09-13 10:03:13.504932987 +0200
> @@ -3,4 +3,4 @@
>  /* { dg-options "-std=gnu11 -pedantic-errors" } */
>  
>  #warning example text /* { dg-warning "example text" } */
> -/* { dg-error "#warning before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
> +/* { dg-error "'#warning' before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
> --- gcc/testsuite/gcc.dg/cpp/gnu11-warning-2.c.jj	2023-11-07 23:15:16.677412777 +0100
> +++ gcc/testsuite/gcc.dg/cpp/gnu11-warning-2.c	2024-09-13 10:03:23.260798068 +0200
> @@ -3,4 +3,4 @@
>  /* { dg-options "-std=gnu11 -pedantic" } */
>  
>  #warning example text /* { dg-warning "example text" } */
> -/* { dg-warning "#warning before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
> +/* { dg-warning "'#warning' before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
> --- gcc/testsuite/gcc.dg/cpp/gnu11-warning-3.c.jj	2023-11-07 23:15:16.677412777 +0100
> +++ gcc/testsuite/gcc.dg/cpp/gnu11-warning-3.c	2024-09-13 10:03:33.458657039 +0200
> @@ -3,4 +3,4 @@
>  /* { dg-options "-std=gnu11 -Wc11-c23-compat" } */
>  
>  #warning example text /* { dg-warning "example text" } */
> -/* { dg-warning "#warning before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
> +/* { dg-warning "'#warning' before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
> --- gcc/testsuite/gcc.dg/cpp/gnu23-warning-2.c.jj	2023-11-08 23:04:12.263052031 +0100
> +++ gcc/testsuite/gcc.dg/cpp/gnu23-warning-2.c	2024-09-13 10:03:55.953345947 +0200
> @@ -3,4 +3,4 @@
>  /* { dg-options "-std=gnu23 -pedantic-errors -Wc11-c23-compat" } */
>  
>  #warning example text /* { dg-warning "example text" } */
> -/* { dg-warning "#warning before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
> +/* { dg-warning "'#warning' before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
> --- gcc/testsuite/gcc.dg/cpp/include6.c.jj	2020-01-14 20:02:47.256602748 +0100
> +++ gcc/testsuite/gcc.dg/cpp/include6.c	2024-09-13 10:04:29.889876620 +0200
> @@ -3,12 +3,12 @@
>  
>  #include <stddef.h>
>  #include "stddef.h"
> -#include L"stddef.h"		/* { dg-error "include expects" } */
> -#include u"stddef.h"		/* { dg-error "include expects" } */
> -#include U"stddef.h"		/* { dg-error "include expects" } */
> -#include u8"stddef.h"		/* { dg-error "include expects" } */
> -#include R"(stddef.h)"		/* { dg-error "include expects" } */
> -#include LR"(stddef.h)"		/* { dg-error "include expects" } */
> -#include uR"(stddef.h)"		/* { dg-error "include expects" } */
> -#include UR"(stddef.h)"		/* { dg-error "include expects" } */
> -#include u8R"(stddef.h)"	/* { dg-error "include expects" } */
> +#include L"stddef.h"		/* { dg-error "'#include' expects" } */
> +#include u"stddef.h"		/* { dg-error "'#include' expects" } */
> +#include U"stddef.h"		/* { dg-error "'#include' expects" } */
> +#include u8"stddef.h"		/* { dg-error "'#include' expects" } */
> +#include R"(stddef.h)"		/* { dg-error "'#include' expects" } */
> +#include LR"(stddef.h)"		/* { dg-error "'#include' expects" } */
> +#include uR"(stddef.h)"		/* { dg-error "'#include' expects" } */
> +#include UR"(stddef.h)"		/* { dg-error "'#include' expects" } */
> +#include u8R"(stddef.h)"	/* { dg-error "'#include' expects" } */
> --- gcc/testsuite/gcc.dg/cpp/pr35322.c.jj	2020-01-14 20:02:47.259602704 +0100
> +++ gcc/testsuite/gcc.dg/cpp/pr35322.c	2024-09-13 09:37:37.032143154 +0200
> @@ -1,4 +1,4 @@
>  /* Test case for PR 35322 -- _Pragma ICE.  */
>  
>  /* { dg-do preprocess } */
> -_Pragma("GCC dependency") /* { dg-error "#pragma dependency expects" } */
> +_Pragma("GCC dependency") /* { dg-error "'#pragma GCC dependency' expects" } */
> --- gcc/testsuite/gcc.dg/cpp/tr-warn6.c.jj	2020-01-14 20:02:47.262602659 +0100
> +++ gcc/testsuite/gcc.dg/cpp/tr-warn6.c	2024-09-13 10:05:03.649409740 +0200
> @@ -4,15 +4,15 @@
>  /* { dg-do preprocess } */
>  /* { dg-options "-Wtraditional" } */
>  
> -#define foo1(h) sdf "h3" fds "h" /* { dg-warning "macro argument \"h\" would be stringified" "traditional stringification" } */
> -#define foo2(h2) sdf "h2" fds "h3" /* { dg-warning "macro argument \"h2\" would be stringified" "traditional stringification" } */
> -#define foo3(h3) sdf "h2" fds "h3" /* { dg-warning "macro argument \"h3\" would be stringified" "traditional stringification" } */
> -#define foo4(h) sdf 'h3' fds 'h' /* { dg-warning "macro argument \"h\" would be stringified" "traditional stringification" } */
> -#define foo5(h2) sdf 'h2' fds 'h3' /* { dg-warning "macro argument \"h2\" would be stringified" "traditional stringification" } */
> -#define foo6(h3) sdf 'h2' fds 'h3' /* { dg-warning "macro argument \"h3\" would be stringified" "traditional stringification" } */
> -#define foo7(AA, hello, world, EEE) sdf "A B hello C,world,DhelloE F" fds EEE /* { dg-warning "macro argument \"hello\" would be stringified" "traditional stringification" } */
> +#define foo1(h) sdf "h3" fds "h" /* { dg-warning "macro argument 'h' would be stringified" "traditional stringification" } */
> +#define foo2(h2) sdf "h2" fds "h3" /* { dg-warning "macro argument 'h2' would be stringified" "traditional stringification" } */
> +#define foo3(h3) sdf "h2" fds "h3" /* { dg-warning "macro argument 'h3' would be stringified" "traditional stringification" } */
> +#define foo4(h) sdf 'h3' fds 'h' /* { dg-warning "macro argument 'h' would be stringified" "traditional stringification" } */
> +#define foo5(h2) sdf 'h2' fds 'h3' /* { dg-warning "macro argument 'h2' would be stringified" "traditional stringification" } */
> +#define foo6(h3) sdf 'h2' fds 'h3' /* { dg-warning "macro argument 'h3' would be stringified" "traditional stringification" } */
> +#define foo7(AA, hello, world, EEE) sdf "A B hello C,world,DhelloE F" fds EEE /* { dg-warning "macro argument 'hello' would be stringified" "traditional stringification" } */
>  /* Catch the second warning from the above line.  */
> -/* { dg-warning "macro argument \"world\" would be stringified" "traditional stringification second warning" { target *-*-* } .-2 } */
> +/* { dg-warning "macro argument 'world' would be stringified" "traditional stringification second warning" { target *-*-* } .-2 } */
>  
>  # 19 "sys-header.h" 3
>  /* We are in system headers now, no -Wtraditional warnings should issue.  */
> --- gcc/testsuite/gcc.dg/cpp/undef2.c.jj	2023-06-26 09:27:04.364366303 +0200
> +++ gcc/testsuite/gcc.dg/cpp/undef2.c	2024-09-13 09:38:29.270422526 +0200
> @@ -3,11 +3,11 @@
>  
>  /* { dg-do preprocess } */
>  
> -#undef __DATE__		/* { dg-warning "undefining \"__DATE__\"" } */
> -#undef __TIME__		/* { dg-warning "undefining \"__TIME__\"" } */
> -#undef __FILE__		/* { dg-warning "undefining \"__FILE__\"" } */
> -#undef __LINE__		/* { dg-warning "undefining \"__LINE__\"" } */
> -#undef __STDC__		/* { dg-warning "undefining \"__STDC__\"" } */
> +#undef __DATE__		/* { dg-warning "undefining '__DATE__'" } */
> +#undef __TIME__		/* { dg-warning "undefining '__TIME__'" } */
> +#undef __FILE__		/* { dg-warning "undefining '__FILE__'" } */
> +#undef __LINE__		/* { dg-warning "undefining '__LINE__'" } */
> +#undef __STDC__		/* { dg-warning "undefining '__STDC__'" } */
>  
>  /* These should be protected from #undef, but aren't, because they
>     are set with normal #define commands - and on top of that, some
> --- gcc/testsuite/gcc.dg/cpp/warn-comments.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-comments.c	2024-09-13 10:06:01.869604582 +0200
> @@ -1,7 +1,7 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wcomments" }
>  
> -/* /* */  // { dg-warning "4: \"\.\*\" within comment .-Wcomment." }
> +/* /* */  // { dg-warning "4: '\.\*\' within comment .-Wcomment." }
>  
>  // \
>            // { dg-warning "1: multi-line comment .-Wcomment." "multi-line" { target *-*-* } .-1 }
> --- gcc/testsuite/gcc.dg/cpp/warn-comments-2.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-comments-2.c	2024-09-13 10:05:30.133043484 +0200
> @@ -1,7 +1,7 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=comments" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -/* /* */  // { dg-error "\"\.\*\" within comment .-Werror=comment." }
> +/* /* */  // { dg-error "'\.\*' within comment .-Werror=comment." }
>  
>  // \
>            // { dg-error "multi-line comment .-Werror=comment." "multi-line" { target *-*-* } .-1 }
> --- gcc/testsuite/gcc.dg/cpp/warn-comments-3.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-comments-3.c	2024-09-13 10:05:45.719827927 +0200
> @@ -1,7 +1,7 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=comment" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -/* /* */  // { dg-error "\"\.\*\" within comment .-Werror=comment." }
> +/* /* */  // { dg-error "'\.\*' within comment .-Werror=comment." }
>  
>  // \
>            // { dg-error "multi-line comment .-Werror=comment." "multi-line" { target *-*-* } .-1 }
> --- gcc/testsuite/gcc.dg/cpp/warn-cxx-compat.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-cxx-compat.c	2024-09-13 10:06:43.508028740 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wc++-compat" }
>  
> -#define not !  // { dg-warning "identifier \"not\" is a special operator name in C\\+\\+ .-Wc\\+\\+-compat." }
> +#define not !  // { dg-warning "identifier 'not' is a special operator name in C\\+\\+ .-Wc\\+\\+-compat." }
> --- gcc/testsuite/gcc.dg/cpp/warn-cxx-compat-2.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-cxx-compat-2.c	2024-09-13 10:06:33.433168076 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=c++-compat" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -#define not !  // { dg-error "identifier \"not\" is a special operator name in C\\+\\+ .-Werror=c\\+\\+-compat." }
> +#define not !  // { dg-error "identifier 'not' is a special operator name in C\\+\\+ .-Werror=c\\+\\+-compat." }
> --- gcc/testsuite/gcc.dg/cpp/warn-deprecated.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-deprecated.c	2024-09-13 09:17:54.870527587 +0200
> @@ -1,7 +1,7 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wdeprecated" }
>  
> -#assert x(x)  // { dg-warning "#assert is a deprecated GCC extension .-Wdeprecated." }
> +#assert x(x)  // { dg-warning "'#assert' is a deprecated GCC extension .-Wdeprecated." }
>  
>  #if #x(x)     // { dg-warning "assertions are a deprecated extension .-Wdeprecated." }
>  #endif
> --- gcc/testsuite/gcc.dg/cpp/warn-deprecated-2.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-deprecated-2.c	2024-09-13 09:17:36.687780318 +0200
> @@ -1,7 +1,7 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=deprecated" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -#assert x(x)  // { dg-error "#assert is a deprecated GCC extension .-Werror=deprecated." }
> +#assert x(x)  // { dg-error "'#assert' is a deprecated GCC extension .-Werror=deprecated." }
>  
>  #if #x(x)     // { dg-error "assertions are a deprecated extension .-Werror=deprecated." }
>  #endif
> --- gcc/testsuite/gcc.dg/cpp/warn-long-long.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-long-long.c	2024-09-13 10:49:43.105434975 +0200
> @@ -1,6 +1,6 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wtraditional -Wlong-long" }
>  
> -#if 0LL  // { dg-warning "traditional C rejects the \"LL\" suffix .-Wlong-long." }
> +#if 0LL  // { dg-warning "traditional C rejects the 'LL' suffix .-Wlong-long." }
>           // { dg-warning "use of C99 long long integer constant .-Wlong-long." "use long long" { target *-*-* } .-1 }
>  #endif
> --- gcc/testsuite/gcc.dg/cpp/warn-long-long-2.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-long-long-2.c	2024-09-13 10:49:27.879644101 +0200
> @@ -1,6 +1,6 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wtraditional -Werror=long-long" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -#if 0LL  // { dg-error "traditional C rejects the \"LL\" suffix .-Werror=long-long." }
> +#if 0LL  // { dg-error "traditional C rejects the 'LL' suffix .-Werror=long-long." }
>           // { dg-error "use of C99 long long integer constant .-Werror=long-long." "use long long" { target *-*-* } .-1 }
>  #endif
> --- gcc/testsuite/gcc.dg/cpp/warn-normalized-1.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-normalized-1.c	2024-09-13 09:18:28.026067303 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wnormalized=nfc" }
>  
> -\u0F43  // { dg-warning "`.U00000f43' is not in NFC .-Wnormalized=." }
> +\u0F43  // { dg-warning "'.U00000f43' is not in NFC .-Wnormalized=." }
> --- gcc/testsuite/gcc.dg/cpp/warn-normalized-2.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-normalized-2.c	2024-09-13 09:18:37.504935755 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wnormalized=nfkc" }
>  
> -\u00AA  // { dg-warning "`.U000000aa' is not in NFKC .-Wnormalized=." }
> +\u00AA  // { dg-warning "'.U000000aa' is not in NFKC .-Wnormalized=." }
> --- gcc/testsuite/gcc.dg/cpp/warn-normalized-3.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-normalized-3.c	2024-09-13 09:18:49.252772719 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=normalized=nfc" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -\u0F43  // { dg-error "`.U00000f43' is not in NFC .-Werror=normalized=." }
> +\u0F43  // { dg-error "'.U00000f43' is not in NFC .-Werror=normalized=." }
> --- gcc/testsuite/gcc.dg/cpp/warn-normalized-4-bytes.c.jj	2021-11-01 23:01:30.575702414 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-normalized-4-bytes.c	2024-09-13 09:19:28.158232793 +0200
> @@ -8,13 +8,13 @@
>  
>     The UTF-8 encoding of U+0F43 TIBETAN LETTER GHA is: E0 BD 83.  */
>  
> -foo before_\u0F43_after bar // { dg-error "`before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
> +foo before_\u0F43_after bar // { dg-error "'before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
>  /* { dg-begin-multiline-output "" }
>   foo before_\u0F43_after bar
>       ^~~~~~~~~~~~~~~~~~~
>     { dg-end-multiline-output "" } */
>  
> -foo before_གྷ_after bar // { dg-error "`before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
> +foo before_གྷ_after bar // { dg-error "'before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
>  /* { dg-begin-multiline-output "" }
>   foo before_<e0><bd><83>_after bar
>       ^~~~~~~~~~~~~~~~~~~~~~~~~
> --- gcc/testsuite/gcc.dg/cpp/warn-normalized-4-unicode.c.jj	2021-11-01 23:01:30.575702414 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-normalized-4-unicode.c	2024-09-13 09:39:04.114941851 +0200
> @@ -6,13 +6,13 @@
>     U+0F42 TIBETAN LETTER GA: ག
>     U+0FB7 TIBETAN SUBJOINED LETTER HA: ྷ  */
>  
> -foo before_\u0F43_after bar  // { dg-error "`before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
> +foo before_\u0F43_after bar  // { dg-error "'before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
>  /* { dg-begin-multiline-output "" }
>   foo before_\u0F43_after bar
>       ^~~~~~~~~~~~~~~~~~~
>     { dg-end-multiline-output "" } */
>  
> -foo before_གྷ_after bar // { dg-error "`before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
> +foo before_གྷ_after bar // { dg-error "'before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
>  /* { dg-begin-multiline-output "" }
>   foo before_<U+0F43>_after bar
>       ^~~~~~~~~~~~~~~~~~~~~
> --- gcc/testsuite/gcc.dg/cpp/warn-redefined.c.jj	2023-06-26 09:27:04.364366303 +0200
> +++ gcc/testsuite/gcc.dg/cpp/warn-redefined.c	2024-09-13 09:39:52.399275771 +0200
> @@ -6,13 +6,13 @@
>  // { dg-bogus "__TIME__ builtin is not defined" "no-time" { target *-*-* } .-1 }
>  #endif
>  
> -#define __TIME__ "X"  // { dg-warning "\"__TIME__\" redefined .-Wbuiltin-macro-redefined." }
> +#define __TIME__ "X"  // { dg-warning "'__TIME__' redefined .-Wbuiltin-macro-redefined." }
>  
>  #define __TIME__ "Y"  // { dg-bogus "-Wbuiltin-macro-redefined" }
> -                      // { dg-warning "\"__TIME__\" redefined" "not-builtin-1" { target *-*-* } .-1 }
> +                      // { dg-warning "'__TIME__' redefined" "not-builtin-1" { target *-*-* } .-1 }
>                        // { dg-message "previous definition" "previous-1" { target *-*-* } 9 }
>  
>  #define X "X"
>  #define X "Y"         // { dg-bogus "-Wbuiltin-macro-redefined" }
> -                      // { dg-warning "\"X\" redefined" "not-builtin-2" { target *-*-* } .-1 }
> +                      // { dg-warning "'X' redefined" "not-builtin-2" { target *-*-* } .-1 }
>                        // { dg-message "previous definition" "previous-2" { target *-*-* } 15 }
> --- gcc/testsuite/gcc.dg/cpp/warn-redefined-2.c.jj	2023-06-26 09:27:04.364366303 +0200
> +++ gcc/testsuite/gcc.dg/cpp/warn-redefined-2.c	2024-09-13 09:39:40.259443242 +0200
> @@ -6,13 +6,13 @@
>  // { dg-bogus "__TIME__ builtin is not defined" "no-time" { target *-*-* } .-1 }
>  #endif
>  
> -#define __TIME__ "X"  // { dg-error "\"__TIME__\" redefined .-Werror=builtin-macro-redefined." }
> +#define __TIME__ "X"  // { dg-error "'__TIME__' redefined .-Werror=builtin-macro-redefined." }
>  
>  #define __TIME__ "Y"  // { dg-bogus "-Wbuiltin-macro-redefined" }
> -                      // { dg-warning "\"__TIME__\" redefined" "not-builtin-1" { target *-*-* } .-1 }
> +                      // { dg-warning "'__TIME__' redefined" "not-builtin-1" { target *-*-* } .-1 }
>                        // { dg-message "previous definition" "previous-1" { target *-*-* } 9 }
>  
>  #define X "X"
>  #define X "Y"         // { dg-bogus "-Wbuiltin-macro-redefined" }
> -                      // { dg-warning "\"X\" redefined" "not-builtin-2" { target *-*-* } .-1 }
> +                      // { dg-warning "'X' redefined" "not-builtin-2" { target *-*-* } .-1 }
>                        // { dg-message "previous definition" "previous-2" { target *-*-* } 15 }
> --- gcc/testsuite/gcc.dg/cpp/warn-traditional.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-traditional.c	2024-09-13 09:46:09.893068261 +0200
> @@ -1,18 +1,18 @@
>  // { dg-do compile }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wtraditional -Wno-deprecated -Wno-long-long" }
>  
> -#assert x(x)         // { dg-warning "suggest hiding #assert from traditional C with an indented # .-Wtraditional." }
> +#assert x(x)         // { dg-warning "suggest hiding '#assert' from traditional C with an indented '#' .-Wtraditional." }
>  
> - #define X X         // { dg-warning "traditional C ignores #define with the # indented .-Wtraditional." }
> + #define X X         // { dg-warning "traditional C ignores '#define' with the '#' indented .-Wtraditional." }
>  
>  #if 0
> -#elif 1              // { dg-warning "suggest not using #elif in traditional C .-Wtraditional." }
> +#elif 1              // { dg-warning "suggest not using '#elif' in traditional C .-Wtraditional." }
>  #endif
>  
>  #define f(X) X
> -int f;               // { dg-warning "function-like macro \"f\" must be used with arguments in traditional C .-Wtraditional." }
> +int f;               // { dg-warning "function-like macro 'f' must be used with arguments in traditional C .-Wtraditional." }
>  
> -#if 0U               // { dg-warning "traditional C rejects the \"U\" suffix .-Wtraditional." }
> +#if 0U               // { dg-warning "traditional C rejects the 'U' suffix .-Wtraditional." }
>  #endif
>  
>  #if +1               // { dg-warning " traditional C rejects the unary plus operator .-Wtraditional." }
> --- gcc/testsuite/gcc.dg/cpp/warn-traditional-2.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-traditional-2.c	2024-09-13 09:45:22.464722533 +0200
> @@ -1,18 +1,18 @@
>  // { dg-do compile }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=traditional -Wno-deprecated -Wno-long-long" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -#assert x(x)         // { dg-error "suggest hiding #assert from traditional C with an indented # .-Werror=traditional." }
> +#assert x(x)         // { dg-error "suggest hiding '#assert' from traditional C with an indented '#' .-Werror=traditional." }
>  
> - #define X X         // { dg-error "traditional C ignores #define with the # indented .-Werror=traditional." }
> + #define X X         // { dg-error "traditional C ignores '#define' with the '#' indented .-Werror=traditional." }
>  
>  #if 0
> -#elif 1              // { dg-error "suggest not using #elif in traditional C .-Werror=traditional." }
> +#elif 1              // { dg-error "suggest not using '#elif' in traditional C .-Werror=traditional." }
>  #endif
>  
>  #define f(X) X
> -int f;               // { dg-error "function-like macro \"f\" must be used with arguments in traditional C .-Werror=traditional." }
> +int f;               // { dg-error "function-like macro 'f' must be used with arguments in traditional C .-Werror=traditional." }
>  
> -#if 0U               // { dg-error "traditional C rejects the \"U\" suffix .-Werror=traditional." }
> +#if 0U               // { dg-error "traditional C rejects the 'U' suffix .-Werror=traditional." }
>  #endif
>  
>  #if +1               // { dg-error " traditional C rejects the unary plus operator .-Werror=traditional." }
> --- gcc/testsuite/gcc.dg/cpp/warn-trigraphs-1.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-trigraphs-1.c	2024-09-13 09:46:35.401716367 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -trigraphs -Wtrigraphs" }
>  
> -??=  // { dg-warning "trigraph \\?\\?= converted to # .-Wtrigraphs." }
> +??=  // { dg-warning "trigraph '\\?\\?=' converted to '#' .-Wtrigraphs." }
> --- gcc/testsuite/gcc.dg/cpp/warn-trigraphs-2.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-trigraphs-2.c	2024-09-13 09:46:55.318441618 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wtrigraphs" }
>  
> -??=  // { dg-warning "trigraph \\?\\?= ignored, use -trigraphs to enable .-Wtrigraphs." }
> +??=  // { dg-warning "trigraph '\\?\\?=' ignored, use '-trigraphs' to enable .-Wtrigraphs." }
> --- gcc/testsuite/gcc.dg/cpp/warn-trigraphs-3.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-trigraphs-3.c	2024-09-13 09:47:21.814076115 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -trigraphs -Werror=trigraphs" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -??=  // { dg-error "trigraph \\?\\?= converted to # .-Werror=trigraphs." }
> +??=  // { dg-error "trigraph '\\?\\?=' converted to '#' .-Werror=trigraphs." }
> --- gcc/testsuite/gcc.dg/cpp/warn-trigraphs-4.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-trigraphs-4.c	2024-09-13 09:48:12.141381846 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=trigraphs" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -??=  // { dg-error "trigraph \\?\\?= ignored, use -trigraphs to enable .-Werror=trigraphs." }
> +??=  // { dg-error "trigraph '\\?\\?=' ignored, use '-trigraphs' to enable .-Werror=trigraphs." }
> --- gcc/testsuite/gcc.dg/cpp/warn-undef.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-undef.c	2024-09-13 09:52:58.330433881 +0200
> @@ -1,5 +1,5 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wundef" }
>  
> -#if x  // { dg-warning "\"x\" is not defined, evaluates to 0 .-Wundef." }
> +#if x  // { dg-warning "'x' is not defined, evaluates to '0' .-Wundef." }
>  #endif
> --- gcc/testsuite/gcc.dg/cpp/warn-undef-2.c.jj	2020-01-14 20:02:47.265602614 +0100
> +++ gcc/testsuite/gcc.dg/cpp/warn-undef-2.c	2024-09-13 09:52:43.430639425 +0200
> @@ -1,5 +1,5 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=undef" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -#if x  // { dg-error "\"x\" is not defined, evaluates to 0 .-Werror=undef." }
> +#if x  // { dg-error "'x' is not defined, evaluates to '0' .-Werror=undef." }
>  #endif
> --- gcc/testsuite/gcc.dg/cpp/warn-unused-macros.c.jj	2023-06-26 09:27:04.364366303 +0200
> +++ gcc/testsuite/gcc.dg/cpp/warn-unused-macros.c	2024-09-13 10:07:35.701306932 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wunused-macros" }
>  
> -#define X X  // { dg-warning "9:macro \"X\" is not used .-Wunused-macros." }
> +#define X X  // { dg-warning "9:macro 'X' is not used .-Wunused-macros." }
> --- gcc/testsuite/gcc.dg/cpp/warn-unused-macros-2.c.jj	2023-06-26 09:27:04.364366303 +0200
> +++ gcc/testsuite/gcc.dg/cpp/warn-unused-macros-2.c	2024-09-13 10:07:22.584488329 +0200
> @@ -1,4 +1,4 @@
>  // { dg-do preprocess }
>  // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=unused-macros" }
>  /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
> -#define X X  // { dg-error "9:macro \"X\" is not used .-Werror=unused-macros." }
> +#define X X  // { dg-error "9:macro 'X' is not used .-Werror=unused-macros." }
> --- gcc/testsuite/gcc.dg/pch/counter-2.c.jj	2020-01-14 20:02:47.335601565 +0100
> +++ gcc/testsuite/gcc.dg/pch/counter-2.c	2024-09-13 10:21:41.664620418 +0200
> @@ -7,7 +7,7 @@
>  #error __COUNTER__ != 0
>  #endif
>  
> -#include "counter-2.h" /* { dg-warning "not used because `__COUNTER__' is invalid" } */
> +#include "counter-2.h" /* { dg-warning "not used because '__COUNTER__' is invalid" } */
>  /* { dg-error "counter-2.h: No such file or directory" "no such file" { target *-*-* } 0 } */
>  /* { dg-error "one or more PCH files were found, but they were invalid" "invalid files" { target *-*-* } .-2 } */
>  /* { dg-message "terminated" "" { target *-*-* } 0 } */
> --- gcc/testsuite/g++.dg/cpp0x/udlit-error1.C.jj	2024-06-14 15:18:17.793230368 +0200
> +++ gcc/testsuite/g++.dg/cpp0x/udlit-error1.C	2024-09-13 10:39:27.442909364 +0200
> @@ -3,7 +3,7 @@
>  
>  void operator""_x(const char *, decltype(sizeof(0)));
>  
> -#include ""_x		  // { dg-error "include expects" }
> +#include ""_x		  // { dg-error "'#include' expects" }
>  #line ""_x		  // { dg-error "not a positive integer" }
>  #if __has_include(""_x)	  // { dg-error "requires a header-name" }
>  #endif
> --- gcc/testsuite/g++.dg/cpp23/named-universal-char-escape1.C.jj	2022-09-07 22:49:17.683000679 +0200
> +++ gcc/testsuite/g++.dg/cpp23/named-universal-char-escape1.C	2024-09-13 10:25:44.399267858 +0200
> @@ -8,9 +8,9 @@ int b = a\N{});				// { dg-warning "empt
>  int c = a\N{);				// { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{; treating it as separate tokens" "" { target c++23 } }
>  int d = a\N);
>  int e = a\NARG);
> -int f = a\N{abc});			// { dg-warning "\\\\N\\\{abc\\\} is not a valid universal character; treating it as separate tokens" "" { target c++23 } }
> +int f = a\N{abc});			// { dg-warning "'\\\\N\\\{abc\\\}' is not a valid universal character; treating it as separate tokens" "" { target c++23 } }
>  int g = a\N{ABC.123});			// { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{ABC; treating it as separate tokens" "" { target c++23 } }
>  int h = a\N{NON-EXISTENT CHAR});	// { dg-error "is not a valid universal character" "" { target c++23 } }
>  					// { dg-error "was not declared in this scope" "" { target c++23 } .-1 }
> -int i = a\N{Latin_Small_Letter_A_With_Acute});	// { dg-warning "\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\} is not a valid universal character; treating it as separate tokens" "" { target c++23 } }
> -					// { dg-message "did you mean \\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}\\?" "" { target c++23 } .-1 }
> +int i = a\N{Latin_Small_Letter_A_With_Acute});	// { dg-warning "'\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\}' is not a valid universal character; treating it as separate tokens" "" { target c++23 } }
> +					// { dg-message "did you mean '\\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}'\\?" "" { target c++23 } .-1 }
> --- gcc/testsuite/g++.dg/cpp23/named-universal-char-escape2.C.jj	2022-09-07 22:49:17.683000679 +0200
> +++ gcc/testsuite/g++.dg/cpp23/named-universal-char-escape2.C	2024-09-13 10:27:43.516623181 +0200
> @@ -9,10 +9,10 @@ int b = a\N{});				// { dg-warning "empt
>  int c = a\N{);				// { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{; treating it as separate tokens" }
>  int d = a\N);
>  int e = a\NARG);
> -int f = a\N{abc});			// { dg-warning "\\\\N\\\{abc\\\} is not a valid universal character; treating it as separate tokens" }
> +int f = a\N{abc});			// { dg-warning "'\\\\N\\\{abc\\\}' is not a valid universal character; treating it as separate tokens" }
>  int g = a\N{ABC.123});			// { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{ABC; treating it as separate tokens" }
>  int h = a\N{NON-EXISTENT CHAR});	// { dg-error "is not a valid universal character" "" { target c++23 } }
>  					// { dg-error "was not declared in this scope" "" { target c++23 } .-1 }
> -					// { dg-warning "\\\\N\\\{NON-EXISTENT CHAR\\\} is not a valid universal character; treating it as separate tokens" "" { target c++20_down } .-2 }
> -int i = a\N{Latin_Small_Letter_A_With_Acute});	// { dg-warning "\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\} is not a valid universal character; treating it as separate tokens" }
> -					// { dg-message "did you mean \\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}\\?" "" { target *-*-* } .-1 }
> +					// { dg-warning "'\\\\N\\\{NON-EXISTENT CHAR\\\}' is not a valid universal character; treating it as separate tokens" "" { target c++20_down } .-2 }
> +int i = a\N{Latin_Small_Letter_A_With_Acute});	// { dg-warning "'\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\}' is not a valid universal character; treating it as separate tokens" }
> +					// { dg-message "did you mean '\\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}'\\?" "" { target *-*-* } .-1 }
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-1.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-1.C	2024-09-13 10:29:10.065428846 +0200
> @@ -4,40 +4,40 @@
>  // { dg-options "-finput-charset=UTF-8" }
>  
>  // a?߿ࠀ퟿𐀀?a		{ dg-bogus "invalid UTF-8 character" }
> -// a�a					{ dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -// a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -// a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -// a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -// a��a					{ dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -// a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -// a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -// a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -// a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -// a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -//					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +// a�a					{ dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +// a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +// a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +// a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +// a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +// a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +// a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +// a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +// a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +// a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +//					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  /* a?߿ࠀ퟿𐀀?a		{ dg-bogus "invalid UTF-8 character" } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <80>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } } */
> -/* a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } } */
> -/* a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } } */
> -/* a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } } */
> -/* a��a					{ dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } } */
> -/* a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } } */
> -/* a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } } */
> -/* a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } } */
> -/* a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } } */
> -/* a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } } */
> -/*					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } } */
> +/* a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } } */
> +/* a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } } */
> +/* a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } } */
> +/* a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } } */
> +/* a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } } */
> +/* a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } } */
> +/* a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } } */
> +/* a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } } */
> +/* a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } } */
> +/*					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 } */
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-2.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-2.C	2024-09-13 10:29:24.335231933 +0200
> @@ -4,40 +4,40 @@
>  // { dg-options "-finput-charset=UTF-8 -pedantic" }
>  
>  // a?߿ࠀ퟿𐀀?a		{ dg-bogus "invalid UTF-8 character" }
> -// a�a					{ dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -// a�a					{ dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -// a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -// a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -// a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -// a��a					{ dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -// a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -// a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -// a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -// a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -// a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -//					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +// a�a					{ dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +// a�a					{ dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +// a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +// a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +// a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +// a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +// a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +// a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +// a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +// a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +// a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +//					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  /* a?߿ࠀ퟿𐀀?a		{ dg-bogus "invalid UTF-8 character" } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <80>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } } */
> -/* a�a					{ dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } } */
> -/* a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } } */
> -/* a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } } */
> -/* a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } } */
> -/* a��a					{ dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } } */
> -/* a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } } */
> -/* a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } } */
> -/* a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } } */
> -/* a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } } */
> -/* a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } } */
> -/*					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } } */
> +/* a�a					{ dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } } */
> +/* a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } } */
> +/* a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } } */
> +/* a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } } */
> +/* a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } } */
> +/* a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } } */
> +/* a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } } */
> +/* a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } } */
> +/* a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } } */
> +/* a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } } */
> +/*					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 } */
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-3.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-3.C	2024-09-13 10:29:41.583993908 +0200
> @@ -4,40 +4,40 @@
>  // { dg-options "-finput-charset=UTF-8 -pedantic-errors" }
>  
>  // a?߿ࠀ퟿𐀀?a		{ dg-bogus "invalid UTF-8 character" }
> -// a�a					{ dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
> -// a�a					{ dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
> -// a�a					{ dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
> -// a�a					{ dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
> -// a�a					{ dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
> -// a�a					{ dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
> -// a�a					{ dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
> -// a�a					{ dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
> -// a���a				{ dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -// a���a				{ dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -// a��a					{ dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -// a��a					{ dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -// a���a				{ dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -// a����a				{ dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -// a����a				{ dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -// a����a				{ dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -// a������a				{ dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -//					{ dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +// a�a					{ dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +// a�a					{ dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +// a�a					{ dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +// a�a					{ dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +// a�a					{ dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +// a�a					{ dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +// a�a					{ dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +// a�a					{ dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +// a���a				{ dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +// a���a				{ dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +// a��a					{ dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +// a��a					{ dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +// a���a				{ dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +// a����a				{ dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +// a����a				{ dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +// a����a				{ dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +// a������a				{ dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +//					{ dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  /* a?߿ࠀ퟿𐀀?a		{ dg-bogus "invalid UTF-8 character" } */
> -/* a�a					{ dg-error "invalid UTF-8 character <80>" "" { target c++23 } } */
> -/* a�a					{ dg-error "invalid UTF-8 character <bf>" "" { target c++23 } } */
> -/* a�a					{ dg-error "invalid UTF-8 character <c0>" "" { target c++23 } } */
> -/* a�a					{ dg-error "invalid UTF-8 character <c1>" "" { target c++23 } } */
> -/* a�a					{ dg-error "invalid UTF-8 character <f5>" "" { target c++23 } } */
> -/* a�a					{ dg-error "invalid UTF-8 character <ff>" "" { target c++23 } } */
> -/* a�a					{ dg-error "invalid UTF-8 character <c2>" "" { target c++23 } } */
> -/* a�a					{ dg-error "invalid UTF-8 character <e0>" "" { target c++23 } } */
> -/* a���a				{ dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } } */
> -/* a���a				{ dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } } */
> -/* a��a					{ dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } } */
> -/* a��a					{ dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } } */
> -/* a���a				{ dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } } */
> -/* a����a				{ dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } } */
> -/* a����a				{ dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } } */
> -/* a����a				{ dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } } */
> -/* a������a				{ dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } } */
> -/*					{ dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 } */
> +/* a�a					{ dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } } */
> +/* a�a					{ dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } } */
> +/* a�a					{ dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } } */
> +/* a�a					{ dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } } */
> +/* a�a					{ dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } } */
> +/* a�a					{ dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } } */
> +/* a�a					{ dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } } */
> +/* a�a					{ dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } } */
> +/* a���a				{ dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } } */
> +/* a���a				{ dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } } */
> +/* a��a					{ dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } } */
> +/* a��a					{ dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } } */
> +/* a���a				{ dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } } */
> +/* a����a				{ dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } } */
> +/* a����a				{ dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } } */
> +/* a����a				{ dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } } */
> +/* a������a				{ dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } } */
> +/*					{ dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 } */
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-4.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-4.C	2024-09-13 10:29:57.796770184 +0200
> @@ -4,40 +4,40 @@
>  // { dg-options "-finput-charset=UTF-8 -pedantic-errors -Wno-invalid-utf8" }
>  
>  // a?߿ࠀ퟿𐀀?a		{ dg-bogus "invalid UTF-8 character" }
> -// a�a					{ dg-bogus "invalid UTF-8 character <80>" }
> -// a�a					{ dg-bogus "invalid UTF-8 character <bf>" }
> -// a�a					{ dg-bogus "invalid UTF-8 character <c0>" }
> -// a�a					{ dg-bogus "invalid UTF-8 character <c1>" }
> -// a�a					{ dg-bogus "invalid UTF-8 character <f5>" }
> -// a�a					{ dg-bogus "invalid UTF-8 character <ff>" }
> -// a�a					{ dg-bogus "invalid UTF-8 character <c2>" }
> -// a�a					{ dg-bogus "invalid UTF-8 character <e0>" }
> -// a���a				{ dg-bogus "invalid UTF-8 character <e0><80><bf>" }
> -// a���a				{ dg-bogus "invalid UTF-8 character <e0><9f><80>" }
> -// a��a					{ dg-bogus "invalid UTF-8 character <e0><bf>" }
> -// a��a					{ dg-bogus "invalid UTF-8 character <ec><80>" }
> -// a���a				{ dg-bogus "invalid UTF-8 character <ed><a0><80>" }
> -// a����a				{ dg-bogus "invalid UTF-8 character <f0><80><80><80>" }
> -// a����a				{ dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" }
> -// a����a				{ dg-bogus "invalid UTF-8 character <f4><90><80><80>" }
> -// a������a				{ dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" }
> -//					{ dg-bogus "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
> +// a�a					{ dg-bogus "invalid UTF-8 character '<80>'" }
> +// a�a					{ dg-bogus "invalid UTF-8 character '<bf>'" }
> +// a�a					{ dg-bogus "invalid UTF-8 character '<c0>'" }
> +// a�a					{ dg-bogus "invalid UTF-8 character '<c1>'" }
> +// a�a					{ dg-bogus "invalid UTF-8 character '<f5>'" }
> +// a�a					{ dg-bogus "invalid UTF-8 character '<ff>'" }
> +// a�a					{ dg-bogus "invalid UTF-8 character '<c2>'" }
> +// a�a					{ dg-bogus "invalid UTF-8 character '<e0>'" }
> +// a���a				{ dg-bogus "invalid UTF-8 character '<e0><80><bf>'" }
> +// a���a				{ dg-bogus "invalid UTF-8 character '<e0><9f><80>'" }
> +// a��a					{ dg-bogus "invalid UTF-8 character '<e0><bf>'" }
> +// a��a					{ dg-bogus "invalid UTF-8 character '<ec><80>'" }
> +// a���a				{ dg-bogus "invalid UTF-8 character '<ed><a0><80>'" }
> +// a����a				{ dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" }
> +// a����a				{ dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" }
> +// a����a				{ dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" }
> +// a������a				{ dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" }
> +//					{ dg-bogus "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
>  /* a?߿ࠀ퟿𐀀?a		{ dg-bogus "invalid UTF-8 character" } */
> -/* a�a					{ dg-bogus "invalid UTF-8 character <80>" } */
> -/* a�a					{ dg-bogus "invalid UTF-8 character <bf>" } */
> -/* a�a					{ dg-bogus "invalid UTF-8 character <c0>" } */
> -/* a�a					{ dg-bogus "invalid UTF-8 character <c1>" } */
> -/* a�a					{ dg-bogus "invalid UTF-8 character <f5>" } */
> -/* a�a					{ dg-bogus "invalid UTF-8 character <ff>" } */
> -/* a�a					{ dg-bogus "invalid UTF-8 character <c2>" } */
> -/* a�a					{ dg-bogus "invalid UTF-8 character <e0>" } */
> -/* a���a				{ dg-bogus "invalid UTF-8 character <e0><80><bf>" } */
> -/* a���a				{ dg-bogus "invalid UTF-8 character <e0><9f><80>" } */
> -/* a��a					{ dg-bogus "invalid UTF-8 character <e0><bf>" } */
> -/* a��a					{ dg-bogus "invalid UTF-8 character <ec><80>" } */
> -/* a���a				{ dg-bogus "invalid UTF-8 character <ed><a0><80>" } */
> -/* a����a				{ dg-bogus "invalid UTF-8 character <f0><80><80><80>" } */
> -/* a����a				{ dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" } */
> -/* a����a				{ dg-bogus "invalid UTF-8 character <f4><90><80><80>" } */
> -/* a������a				{ dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" } */
> -/*					{ dg-bogus "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 } */
> +/* a�a					{ dg-bogus "invalid UTF-8 character '<80>'" } */
> +/* a�a					{ dg-bogus "invalid UTF-8 character '<bf>'" } */
> +/* a�a					{ dg-bogus "invalid UTF-8 character '<c0>'" } */
> +/* a�a					{ dg-bogus "invalid UTF-8 character '<c1>'" } */
> +/* a�a					{ dg-bogus "invalid UTF-8 character '<f5>'" } */
> +/* a�a					{ dg-bogus "invalid UTF-8 character '<ff>'" } */
> +/* a�a					{ dg-bogus "invalid UTF-8 character '<c2>'" } */
> +/* a�a					{ dg-bogus "invalid UTF-8 character '<e0>'" } */
> +/* a���a				{ dg-bogus "invalid UTF-8 character '<e0><80><bf>'" } */
> +/* a���a				{ dg-bogus "invalid UTF-8 character '<e0><9f><80>'" } */
> +/* a��a					{ dg-bogus "invalid UTF-8 character '<e0><bf>'" } */
> +/* a��a					{ dg-bogus "invalid UTF-8 character '<ec><80>'" } */
> +/* a���a				{ dg-bogus "invalid UTF-8 character '<ed><a0><80>'" } */
> +/* a����a				{ dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" } */
> +/* a����a				{ dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" } */
> +/* a����a				{ dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" } */
> +/* a������a				{ dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" } */
> +/*					{ dg-bogus "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 } */
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-5.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-5.C	2024-09-13 10:30:15.259529205 +0200
> @@ -3,78 +3,78 @@
>  // { dg-do preprocess { target c++11 } }
>  // { dg-options "-finput-charset=UTF-8" }
>  
> -char32_t a = U'�';				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -char32_t b = U'�';				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -char32_t c = U'�';				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -char32_t d = U'�';				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -char32_t e = U'�';				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -char32_t f = U'�';				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -char32_t g = U'�';				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -char32_t h = U'�';				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -char32_t i = U'���';				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -char32_t j = U'���';				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -char32_t k = U'��';				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -char32_t l = U'��';				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -char32_t m = U'���';				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -char32_t n = U'����';				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -char32_t o = U'����';				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -char32_t p = U'����';				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -char32_t q = U'������';				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +char32_t a = U'�';				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +char32_t b = U'�';				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +char32_t c = U'�';				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +char32_t d = U'�';				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +char32_t e = U'�';				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +char32_t f = U'�';				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +char32_t g = U'�';				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +char32_t h = U'�';				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +char32_t i = U'���';				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +char32_t j = U'���';				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +char32_t k = U'��';				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +char32_t l = U'��';				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +char32_t m = U'���';				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +char32_t n = U'����';				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +char32_t o = U'����';				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +char32_t p = U'����';				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +char32_t q = U'������';				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A = U"?߿ࠀ퟿𐀀?";		// { dg-bogus "invalid UTF-8 character" }
> -auto B = U"�";					// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C = U"�";					// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D = U"�";					// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E = U"�";					// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F = U"�";					// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G = U"�";					// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H = U"�";					// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I = U"�";					// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J = U"���";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K = U"���";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L = U"��";					// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M = U"��";					// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N = U"���";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O = U"����";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P = U"����";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q = U"����";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R = U"������";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B = U"�";					// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C = U"�";					// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D = U"�";					// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E = U"�";					// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F = U"�";					// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G = U"�";					// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H = U"�";					// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I = U"�";					// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J = U"���";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K = U"���";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L = U"��";					// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M = U"��";					// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N = U"���";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O = U"����";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P = U"����";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q = U"����";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R = U"������";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A1 = UR"(?߿ࠀ퟿𐀀?)";		// { dg-bogus "invalid UTF-8 character" }
> -auto B1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L1 = UR"(��)";				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M1 = UR"(��)";				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R1 = UR"(������)";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L1 = UR"(��)";				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M1 = UR"(��)";				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R1 = UR"(������)";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A2 = u8"?߿ࠀ퟿𐀀?";		// { dg-bogus "invalid UTF-8 character" }
> -auto B2 = u8"�";				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C2 = u8"�";				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D2 = u8"�";				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E2 = u8"�";				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F2 = u8"�";				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G2 = u8"�";				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H2 = u8"�";				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I2 = u8"�";				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J2 = u8"���";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K2 = u8"���";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L2 = u8"��";				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M2 = u8"��";				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N2 = u8"���";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O2 = u8"����";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P2 = u8"����";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q2 = u8"����";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R2 = u8"������";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B2 = u8"�";				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C2 = u8"�";				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F2 = u8"�";				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G2 = u8"�";				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I2 = u8"�";				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J2 = u8"���";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K2 = u8"���";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L2 = u8"��";				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M2 = u8"��";				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N2 = u8"���";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R2 = u8"������";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-6.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-6.C	2024-09-13 10:30:31.747301679 +0200
> @@ -3,78 +3,78 @@
>  // { dg-do preprocess { target c++11 } }
>  // { dg-options "-finput-charset=UTF-8 -pedantic" }
>  
> -char32_t a = U'�';				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -char32_t b = U'�';				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -char32_t c = U'�';				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -char32_t d = U'?';				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -char32_t e = U'�';				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -char32_t f = U'�';				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -char32_t g = U'�';				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -char32_t h = U'�';				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -char32_t i = U'���';				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -char32_t j = U'���';				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -char32_t k = U'��';				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -char32_t l = U'��';				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -char32_t m = U'���';				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -char32_t n = U'����';				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -char32_t o = U'����';				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -char32_t p = U'����';				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -char32_t q = U'������';				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +char32_t a = U'�';				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +char32_t b = U'�';				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +char32_t c = U'�';				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +char32_t d = U'�';				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +char32_t e = U'�';				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +char32_t f = U'�';				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +char32_t g = U'�';				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +char32_t h = U'�';				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +char32_t i = U'���';				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +char32_t j = U'���';				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +char32_t k = U'��';				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +char32_t l = U'��';				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +char32_t m = U'���';				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +char32_t n = U'����';				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +char32_t o = U'����';				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +char32_t p = U'����';				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +char32_t q = U'������';				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A = U"?߿ࠀ퟿𐀀?";		// { dg-bogus "invalid UTF-8 character" }
> -auto B = U"�";					// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C = U"�";					// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D = U"�";					// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E = U"�";					// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F = U"�";					// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G = U"�";					// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H = U"�";					// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I = U"�";					// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J = U"���";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K = U"���";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L = U"��";					// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M = U"��";					// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N = U"���";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O = U"����";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P = U"����";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q = U"����";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R = U"������";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B = U"�";					// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C = U"�";					// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D = U"�";					// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E = U"�";					// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F = U"�";					// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G = U"�";					// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H = U"�";					// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I = U"�";					// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J = U"���";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K = U"���";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L = U"��";					// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M = U"��";					// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N = U"���";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O = U"����";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P = U"����";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q = U"����";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R = U"������";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A1 = UR"(?߿ࠀ퟿𐀀?)";		// { dg-bogus "invalid UTF-8 character" }
> -auto B1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L1 = UR"(��)";				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M1 = UR"(��)";				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R1 = UR"(������)";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L1 = UR"(��)";				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M1 = UR"(��)";				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R1 = UR"(������)";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A2 = u8"?߿ࠀ퟿𐀀?";		// { dg-bogus "invalid UTF-8 character" }
> -auto B2 = u8"�";				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C2 = u8"�";				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D2 = u8"�";				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E2 = u8"�";				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F2 = u8"�";				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G2 = u8"�";				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H2 = u8"�";				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I2 = u8"�";				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J2 = u8"���";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K2 = u8"���";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L2 = u8"��";				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M2 = u8"��";				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N2 = u8"���";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O2 = u8"����";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P2 = u8"����";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q2 = u8"����";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R2 = u8"������";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B2 = u8"�";				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C2 = u8"�";				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F2 = u8"�";				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G2 = u8"�";				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I2 = u8"�";				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J2 = u8"���";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K2 = u8"���";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L2 = u8"��";				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M2 = u8"��";				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N2 = u8"���";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R2 = u8"������";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-7.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-7.C	2024-09-13 10:30:46.597096759 +0200
> @@ -3,78 +3,78 @@
>  // { dg-do preprocess { target c++11 } }
>  // { dg-options "-finput-charset=UTF-8 -pedantic-errors" }
>  
> -char32_t a = U'�';				// { dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
> -char32_t b = U'�';				// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
> -char32_t c = U'�';				// { dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
> -char32_t d = U'�';				// { dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
> -char32_t e = U'�';				// { dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
> -char32_t f = U'�';				// { dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
> -char32_t g = U'�';				// { dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
> -char32_t h = U'�';				// { dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
> -char32_t i = U'���';				// { dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -char32_t j = U'���';				// { dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -char32_t k = U'��';				// { dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -char32_t l = U'��';				// { dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -char32_t m = U'�??';				// { dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -char32_t n = U'����';				// { dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -char32_t o = U'����';				// { dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -char32_t p = U'����';				// { dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -char32_t q = U'������';				// { dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +char32_t a = U'�';				// { dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +char32_t b = U'�';				// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +char32_t c = U'�';				// { dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +char32_t d = U'�';				// { dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +char32_t e = U'�';				// { dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +char32_t f = U'�';				// { dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +char32_t g = U'�';				// { dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +char32_t h = U'�';				// { dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +char32_t i = U'���';				// { dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +char32_t j = U'���';				// { dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +char32_t k = U'�?';				// { dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +char32_t l = U'��';				// { dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +char32_t m = U'���';				// { dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +char32_t n = U'����';				// { dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +char32_t o = U'����';				// { dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +char32_t p = U'����';				// { dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +char32_t q = U'������';				// { dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A = U"?߿ࠀ퟿𐀀?";		// { dg-bogus "invalid UTF-8 character" }
> -auto B = U"�";					// { dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C = U"�";					// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D = U"�";					// { dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E = U"�";					// { dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F = U"�";					// { dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G = U"�";					// { dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H = U"�";					// { dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I = U"�";					// { dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J = U"���";				// { dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K = U"���";				// { dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L = U"��";					// { dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M = U"��";					// { dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N = U"���";				// { dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O = U"����";				// { dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P = U"����";				// { dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q = U"����";				// { dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R = U"������";				// { dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B = U"�";					// { dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C = U"�";					// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D = U"�";					// { dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E = U"�";					// { dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F = U"�";					// { dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G = U"�";					// { dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H = U"�";					// { dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I = U"�";					// { dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J = U"���";				// { dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K = U"���";				// { dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L = U"��";					// { dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M = U"��";					// { dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N = U"���";				// { dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O = U"����";				// { dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P = U"����";				// { dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q = U"����";				// { dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R = U"������";				// { dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A1 = UR"(?߿ࠀ퟿𐀀?)";		// { dg-bogus "invalid UTF-8 character" }
> -auto B1 = UR"(�)";				// { dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C1 = UR"(�)";				// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D1 = UR"(�)";				// { dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E1 = UR"(�)";				// { dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F1 = UR"(�)";				// { dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G1 = UR"(�)";				// { dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H1 = UR"(�)";				// { dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I1 = UR"(�)";				// { dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J1 = UR"(���)";				// { dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K1 = UR"(���)";				// { dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L1 = UR"(��)";				// { dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M1 = UR"(��)";				// { dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N1 = UR"(���)";				// { dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O1 = UR"(����)";				// { dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P1 = UR"(����)";				// { dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q1 = UR"(����)";				// { dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R1 = UR"(������)";				// { dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J1 = UR"(���)";				// { dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K1 = UR"(���)";				// { dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L1 = UR"(��)";				// { dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M1 = UR"(��)";				// { dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N1 = UR"(���)";				// { dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O1 = UR"(����)";				// { dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P1 = UR"(����)";				// { dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q1 = UR"(����)";				// { dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R1 = UR"(������)";				// { dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A2 = u8"?߿ࠀ퟿𐀀?";		// { dg-bogus "invalid UTF-8 character" }
> -auto B2 = u8"�";				// { dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C2 = u8"�";				// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D2 = u8"�";				// { dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E2 = u8"�";				// { dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F2 = u8"�";				// { dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G2 = u8"�";				// { dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H2 = u8"�";				// { dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I2 = u8"�";				// { dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J2 = u8"���";				// { dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K2 = u8"���";				// { dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L2 = u8"��";				// { dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M2 = u8"��";				// { dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N2 = u8"���";				// { dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O2 = u8"����";				// { dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P2 = u8"����";				// { dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q2 = u8"����";				// { dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R2 = u8"������";				// { dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B2 = u8"�";				// { dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C2 = u8"�";				// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D2 = u8"�";				// { dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E2 = u8"�";				// { dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F2 = u8"�";				// { dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G2 = u8"�";				// { dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H2 = u8"�";				// { dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I2 = u8"�";				// { dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J2 = u8"���";				// { dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K2 = u8"���";				// { dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L2 = u8"��";				// { dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M2 = u8"��";				// { dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N2 = u8"���";				// { dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O2 = u8"����";				// { dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P2 = u8"����";				// { dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q2 = u8"����";				// { dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R2 = u8"������";				// { dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-8.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-8.C	2024-09-13 10:31:04.698846968 +0200
> @@ -3,78 +3,78 @@
>  // { dg-do preprocess { target c++11 } }
>  // { dg-options "-finput-charset=UTF-8 -pedantic-errors -Wno-invalid-utf8" }
>  
> -char32_t a = U'�';				// { dg-bogus "invalid UTF-8 character <80>" "" { target c++23 } }
> -char32_t b = U'�';				// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } }
> -char32_t c = U'�';				// { dg-bogus "invalid UTF-8 character <c0>" "" { target c++23 } }
> -char32_t d = U'�';				// { dg-bogus "invalid UTF-8 character <c1>" "" { target c++23 } }
> -char32_t e = U'�';				// { dg-bogus "invalid UTF-8 character <f5>" "" { target c++23 } }
> -char32_t f = U'�';				// { dg-bogus "invalid UTF-8 character <ff>" "" { target c++23 } }
> -char32_t g = U'�';				// { dg-bogus "invalid UTF-8 character <c2>" "" { target c++23 } }
> -char32_t h = U'�';				// { dg-bogus "invalid UTF-8 character <e0>" "" { target c++23 } }
> -char32_t i = U'���';				// { dg-bogus "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -char32_t j = U'���';				// { dg-bogus "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -char32_t k = U'��';				// { dg-bogus "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -char32_t l = U'��';				// { dg-bogus "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -char32_t m = U'���';				// { dg-bogus "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -char32_t n = U'����';				// { dg-bogus "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -char32_t o = U'����';				// { dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -char32_t p = U'����';				// { dg-bogus "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -char32_t q = U'������';				// { dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +char32_t a = U'�';				// { dg-bogus "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +char32_t b = U'�';				// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +char32_t c = U'�';				// { dg-bogus "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +char32_t d = U'�';				// { dg-bogus "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +char32_t e = U'�';				// { dg-bogus "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +char32_t f = U'�';				// { dg-bogus "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +char32_t g = U'�';				// { dg-bogus "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +char32_t h = U'�';				// { dg-bogus "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +char32_t i = U'���';				// { dg-bogus "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +char32_t j = U'���';				// { dg-bogus "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +char32_t k = U'��';				// { dg-bogus "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +char32_t l = U'��';				// { dg-bogus "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +char32_t m = U'���';				// { dg-bogus "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +char32_t n = U'����';				// { dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +char32_t o = U'����';				// { dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +char32_t p = U'����';				// { dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +char32_t q = U'������';				// { dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A = U"?߿ࠀ퟿𐀀?";		// { dg-bogus "invalid UTF-8 character" }
> -auto B = U"�";					// { dg-bogus "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C = U"�";					// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D = U"�";					// { dg-bogus "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E = U"�";					// { dg-bogus "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F = U"�";					// { dg-bogus "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G = U"�";					// { dg-bogus "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H = U"�";					// { dg-bogus "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I = U"�";					// { dg-bogus "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J = U"���";				// { dg-bogus "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K = U"���";				// { dg-bogus "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L = U"��";					// { dg-bogus "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M = U"��";					// { dg-bogus "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N = U"���";				// { dg-bogus "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O = U"����";				// { dg-bogus "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P = U"����";				// { dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q = U"����";				// { dg-bogus "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R = U"������";				// { dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B = U"�";					// { dg-bogus "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C = U"�";					// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D = U"�";					// { dg-bogus "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E = U"�";					// { dg-bogus "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F = U"�";					// { dg-bogus "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G = U"�";					// { dg-bogus "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H = U"�";					// { dg-bogus "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I = U"�";					// { dg-bogus "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J = U"���";				// { dg-bogus "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K = U"���";				// { dg-bogus "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L = U"��";					// { dg-bogus "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M = U"��";					// { dg-bogus "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N = U"���";				// { dg-bogus "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O = U"����";				// { dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P = U"����";				// { dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q = U"����";				// { dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R = U"������";				// { dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A1 = UR"(?߿ࠀ퟿𐀀?)";		// { dg-bogus "invalid UTF-8 character" }
> -auto B1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L1 = UR"(��)";				// { dg-bogus "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M1 = UR"(��)";				// { dg-bogus "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R1 = UR"(������)";				// { dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L1 = UR"(��)";				// { dg-bogus "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M1 = UR"(��)";				// { dg-bogus "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R1 = UR"(������)";				// { dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
>  auto A2 = u8"?߿ࠀ퟿𐀀?";		// { dg-bogus "invalid UTF-8 character" }
> -auto B2 = u8"�";				// { dg-bogus "invalid UTF-8 character <80>" "" { target c++23 } }
> -auto C2 = u8"�";				// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } }
> -auto D2 = u8"�";				// { dg-bogus "invalid UTF-8 character <c0>" "" { target c++23 } }
> -auto E2 = u8"�";				// { dg-bogus "invalid UTF-8 character <c1>" "" { target c++23 } }
> -auto F2 = u8"�";				// { dg-bogus "invalid UTF-8 character <f5>" "" { target c++23 } }
> -auto G2 = u8"�";				// { dg-bogus "invalid UTF-8 character <ff>" "" { target c++23 } }
> -auto H2 = u8"�";				// { dg-bogus "invalid UTF-8 character <c2>" "" { target c++23 } }
> -auto I2 = u8"�";				// { dg-bogus "invalid UTF-8 character <e0>" "" { target c++23 } }
> -auto J2 = u8"���";				// { dg-bogus "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -auto K2 = u8"���";				// { dg-bogus "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -auto L2 = u8"��";				// { dg-bogus "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -auto M2 = u8"��";				// { dg-bogus "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -auto N2 = u8"���";				// { dg-bogus "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -auto O2 = u8"����";				// { dg-bogus "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -auto P2 = u8"����";				// { dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> -auto Q2 = u8"����";				// { dg-bogus "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
> -auto R2 = u8"������";				// { dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
> -						// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
> +auto B2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +auto C2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +auto D2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +auto E2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +auto F2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +auto G2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +auto H2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +auto I2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +auto J2 = u8"���";				// { dg-bogus "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +auto K2 = u8"���";				// { dg-bogus "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +auto L2 = u8"��";				// { dg-bogus "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +auto M2 = u8"��";				// { dg-bogus "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +auto N2 = u8"���";				// { dg-bogus "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +auto O2 = u8"����";				// { dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +auto P2 = u8"����";				// { dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
> +auto Q2 = u8"����";				// { dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
> +auto R2 = u8"������";				// { dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
> +						// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-9.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-9.C	2024-09-13 10:31:20.573627902 +0200
> @@ -6,20 +6,20 @@
>  #define I(x)
>  I(?߿ࠀ퟿𐀀?)	// { dg-bogus "invalid UTF-8 character" }
>                                  // { dg-error "is not valid in an identifier" "" { target *-*-* } .-1 }
> -I(�)				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -I(���)				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -I(���)				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -I(��)				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -I(��)				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -I(���)				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -I(����)				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -I(����)				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +I(���)				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +I(���)				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +I(��)				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +I(��)				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +I(���)				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +I(����)				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +I(����)				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
>  I(����)				// { dg-error "is not valid in an identifier" }
>  I(������)			// { dg-error "is not valid in an identifier" }
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-10.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-10.C	2024-09-13 10:31:41.081344907 +0200
> @@ -6,20 +6,20 @@
>  #define I(x)
>  I(?߿ࠀ퟿𐀀?)	// { dg-bogus "invalid UTF-8 character" }
>                                  // { dg-error "is not valid in an identifier" "" { target *-*-* } .-1 }
> -I(�)				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
> -I(?)				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
> -I(�)				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
> -I(���)				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -I(���)				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -I(��)				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -I(��)				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -I(���)				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -I(����)				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -I(����)				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +I(�)				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +I(���)				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +I(���)				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +I(��)				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +I(��)				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +I(���)				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +I(����)				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +I(����)				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
>  I(����)				// { dg-error "is not valid in an identifier" }
>  I(������)			// { dg-error "is not valid in an identifier" }
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-11.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-11.C	2024-09-13 10:31:55.809141675 +0200
> @@ -6,20 +6,20 @@
>  #define I(x)
>  I(?߿ࠀ퟿𐀀?)	// { dg-bogus "invalid UTF-8 character" }
>                                  // { dg-error "is not valid in an identifier" "" { target *-*-* } .-1 }
> -I(�)				// { dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
> -I(�)				// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
> -I(�)				// { dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
> -I(�)				// { dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
> -I(�)				// { dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
> -I(�)				// { dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
> -I(�)				// { dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
> -I(�)				// { dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
> -I(���)				// { dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
> -I(���)				// { dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
> -I(��)				// { dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
> -I(��)				// { dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
> -I(���)				// { dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
> -I(����)				// { dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
> -I(����)				// { dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
> +I(�)				// { dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
> +I(�)				// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
> +I(�)				// { dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
> +I(�)				// { dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
> +I(�)				// { dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
> +I(�)				// { dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
> +I(�)				// { dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
> +I(�)				// { dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
> +I(���)				// { dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
> +I(���)				// { dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
> +I(��)				// { dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
> +I(��)				// { dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
> +I(���)				// { dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
> +I(����)				// { dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
> +I(����)				// { dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
>  I(����)				// { dg-error "is not valid in an identifier" }
>  I(������)			// { dg-error "is not valid in an identifier" }
> --- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-12.C.jj	2022-09-02 23:05:41.240223960 +0200
> +++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-12.C	2024-09-13 10:32:13.942891436 +0200
> @@ -6,20 +6,20 @@
>  #define I(x)
>  I(?߿ࠀ퟿𐀀?)	// { dg-bogus "invalid UTF-8 character" }
>                                  // { dg-error "is not valid in an identifier" "" { target *-*-* } .-1 }
> -I(�)				// { dg-bogus "invalid UTF-8 character <80>" }
> -I(�)				// { dg-bogus "invalid UTF-8 character <bf>" }
> -I(�)				// { dg-bogus "invalid UTF-8 character <c0>" }
> -I(�)				// { dg-bogus "invalid UTF-8 character <c1>" }
> -I(�)				// { dg-bogus "invalid UTF-8 character <f5>" }
> -I(�)				// { dg-bogus "invalid UTF-8 character <ff>" }
> -I(�)				// { dg-bogus "invalid UTF-8 character <c2>" }
> -I(�)				// { dg-bogus "invalid UTF-8 character <e0>" }
> -I(���)				// { dg-bogus "invalid UTF-8 character <e0><80><bf>" }
> -I(���)				// { dg-bogus "invalid UTF-8 character <e0><9f><80>" }
> -I(��)				// { dg-bogus "invalid UTF-8 character <e0><bf>" }
> -I(��)				// { dg-bogus "invalid UTF-8 character <ec><80>" }
> -I(���)				// { dg-bogus "invalid UTF-8 character <ed><a0><80>" }
> -I(����)				// { dg-bogus "invalid UTF-8 character <f0><80><80><80>" }
> -I(����)				// { dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" }
> +I(�)				// { dg-bogus "invalid UTF-8 character '<80>" }
> +I(�)				// { dg-bogus "invalid UTF-8 character '<bf>'" }
> +I(�)				// { dg-bogus "invalid UTF-8 character '<c0>'" }
> +I(�)				// { dg-bogus "invalid UTF-8 character '<c1>'" }
> +I(�)				// { dg-bogus "invalid UTF-8 character '<f5>'" }
> +I(�)				// { dg-bogus "invalid UTF-8 character '<ff>'" }
> +I(�)				// { dg-bogus "invalid UTF-8 character '<c2>'" }
> +I(�)				// { dg-bogus "invalid UTF-8 character '<e0>'" }
> +I(���)				// { dg-bogus "invalid UTF-8 character '<e0><80><bf>'" }
> +I(���)				// { dg-bogus "invalid UTF-8 character '<e0><9f><80>'" }
> +I(��)				// { dg-bogus "invalid UTF-8 character '<e0><bf>'" }
> +I(��)				// { dg-bogus "invalid UTF-8 character '<ec><80>'" }
> +I(���)				// { dg-bogus "invalid UTF-8 character '<ed><a0><80>'" }
> +I(����)				// { dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" }
> +I(����)				// { dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" }
>  I(����)				// { dg-error "is not valid in an identifier" }
>  I(������)			// { dg-error "is not valid in an identifier" }
> --- gcc/testsuite/g++.dg/cpp/elifdef-3.C.jj	2021-10-07 23:03:44.116934656 +0200
> +++ gcc/testsuite/g++.dg/cpp/elifdef-3.C	2024-09-13 10:34:16.755196685 +0200
> @@ -4,53 +4,53 @@
>  #define A
>  #undef B
>  
> -#elifdef A // { dg-error "#elifdef without #if" }
> -#elifdef B // { dg-error "#elifdef without #if" }
> -#elifndef A // { dg-error "#elifndef without #if" }
> -#elifndef B // { dg-error "#elifndef without #if" }
> +#elifdef A // { dg-error "'#elifdef' without '#if'" }
> +#elifdef B // { dg-error "'#elifdef' without '#if'" }
> +#elifndef A // { dg-error "'#elifndef' without '#if'" }
> +#elifndef B // { dg-error "'#elifndef' without '#if'" }
>  
>  #if 1 // { dg-error "-:began here" }
>  #else
> -#elifdef A // { dg-error "#elifdef after #else" }
> +#elifdef A // { dg-error "'#elifdef' after '#else'" }
>  #endif
>  
>  #if 1 // { dg-error "-:began here" }
>  #else
> -#elifdef B // { dg-error "#elifdef after #else" }
> +#elifdef B // { dg-error "'#elifdef' after '#else'" }
>  #endif
>  
>  #if 1 // { dg-error "-:began here" }
>  #else
> -#elifndef A // { dg-error "#elifndef after #else" }
> +#elifndef A // { dg-error "'#elifndef' after '#else'" }
>  #endif
>  
>  #if 1 // { dg-error "-:began here" }
>  #else
> -#elifndef B // { dg-error "#elifndef after #else" }
> +#elifndef B // { dg-error "'#elifndef' after '#else'" }
>  #endif
>  
>  #if 0
> -#elifdef A = // { dg-error "extra tokens at end of #elifdef directive" }
> +#elifdef A = // { dg-error "extra tokens at end of '#elifdef' directive" }
>  #endif
>  
>  #if 0
> -#elifdef B = // { dg-error "extra tokens at end of #elifdef directive" }
> +#elifdef B = // { dg-error "extra tokens at end of '#elifdef' directive" }
>  #endif
>  
>  #if 0
> -#elifndef A = // { dg-error "extra tokens at end of #elifndef directive" }
> +#elifndef A = // { dg-error "extra tokens at end of '#elifndef' directive" }
>  #endif
>  
>  #if 0
> -#elifndef B = // { dg-error "extra tokens at end of #elifndef directive" }
> +#elifndef B = // { dg-error "extra tokens at end of '#elifndef' directive" }
>  #endif
>  
>  #if 0
> -#elifdef // { dg-error "no macro name given in #elifdef directive" }
> +#elifdef // { dg-error "no macro name given in '#elifdef' directive" }
>  #endif
>  
>  #if 0
> -#elifndef // { dg-error "no macro name given in #elifndef directive" }
> +#elifndef // { dg-error "no macro name given in '#elifndef' directive" }
>  #endif
>  
>  #if 0
> --- gcc/testsuite/g++.dg/cpp/elifdef-5.C.jj	2021-10-07 23:03:44.116934656 +0200
> +++ gcc/testsuite/g++.dg/cpp/elifdef-5.C	2024-09-13 10:35:35.074115927 +0200
> @@ -5,53 +5,53 @@
>  #define A
>  #undef B
>  
> -#elifdef A // { dg-error "#elifdef without #if" }
> -#elifdef B // { dg-error "#elifdef without #if" }
> -#elifndef A // { dg-error "#elifndef without #if" }
> -#elifndef B // { dg-error "#elifndef without #if" }
> +#elifdef A // { dg-error "'#elifdef' without '#if'" }
> +#elifdef B // { dg-error "'#elifdef' without '#if'" }
> +#elifndef A // { dg-error "'#elifndef' without '#if'" }
> +#elifndef B // { dg-error "'#elifndef' without '#if'" }
>  
>  #if 1 // { dg-error "-:began here" }
>  #else
> -#elifdef A // { dg-error "#elifdef after #else" }
> +#elifdef A // { dg-error "'#elifdef' after '#else'" }
>  #endif
>  
>  #if 1 // { dg-error "-:began here" }
>  #else
> -#elifdef B // { dg-error "#elifdef after #else" }
> +#elifdef B // { dg-error "'#elifdef' after '#else'" }
>  #endif
>  
>  #if 1 // { dg-error "-:began here" }
>  #else
> -#elifndef A // { dg-error "#elifndef after #else" }
> +#elifndef A // { dg-error "'#elifndef' after '#else'" }
>  #endif
>  
>  #if 1 // { dg-error "-:began here" }
>  #else
> -#elifndef B // { dg-error "#elifndef after #else" }
> +#elifndef B // { dg-error "'#elifndef' after '#else'" }
>  #endif
>  
>  #if 0
> -#elifdef A = // { dg-warning "extra tokens at end of #elifdef directive" }
> +#elifdef A = // { dg-warning "extra tokens at end of '#elifdef' directive" }
>  #endif
>  
>  #if 0
> -#elifdef B = // { dg-warning "extra tokens at end of #elifdef directive" }
> +#elifdef B = // { dg-warning "extra tokens at end of '#elifdef' directive" }
>  #endif
>  
>  #if 0
> -#elifndef A = // { dg-warning "extra tokens at end of #elifndef directive" }
> +#elifndef A = // { dg-warning "extra tokens at end of '#elifndef' directive" }
>  #endif
>  
>  #if 0
> -#elifndef B = // { dg-warning "extra tokens at end of #elifndef directive" }
> +#elifndef B = // { dg-warning "extra tokens at end of '#elifndef' directive" }
>  #endif
>  
>  #if 0
> -#elifdef // { dg-error "no macro name given in #elifdef directive" }
> +#elifdef // { dg-error "no macro name given in '#elifdef' directive" }
>  #endif
>  
>  #if 0
> -#elifndef // { dg-error "no macro name given in #elifndef directive" }
> +#elifndef // { dg-error "no macro name given in '#elifndef' directive" }
>  #endif
>  
>  #if 0
> --- gcc/testsuite/g++.dg/cpp/elifdef-6.C.jj	2021-10-07 23:03:44.116934656 +0200
> +++ gcc/testsuite/g++.dg/cpp/elifdef-6.C	2024-09-13 10:36:34.664293616 +0200
> @@ -6,7 +6,7 @@
>  #undef B
>  
>  #if 0
> -#elifdef A	// { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifdef A	// { dg-warning "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #define M1 1
>  #endif
>  
> @@ -25,7 +25,7 @@
>  #endif
>  
>  #if 0
> -#elifndef B	// { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifndef B	// { dg-warning "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #define M2 2
>  #endif
>  
> @@ -34,32 +34,32 @@
>  #endif
>  
>  #if 0
> -#elifdef A	// { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifdef A	// { dg-warning "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #else
>  #error "#elifdef A did not apply"
>  #endif
>  
>  #if 0
> -#elifndef B	// { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifndef B	// { dg-warning "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #else
>  #error "#elifndef B did not apply"
>  #endif
>  
>  #if 1
> -#elifdef A	// { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifdef A	// { dg-warning "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #endif
>  
>  #if 1
> -#elifndef B	// { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifndef B	// { dg-warning "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #endif
>  
>  // As with #elif, the syntax of the new directives is relaxed after a
>     non-skipped group. 
>  
>  #if 1
> -#elifdef x * y	// { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifdef x * y	// { dg-warning "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #endif
>  
>  #if 1
> -#elifndef !	// { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifndef !	// { dg-warning "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #endif
> --- gcc/testsuite/g++.dg/cpp/elifdef-7.C.jj	2021-10-07 23:03:44.116934656 +0200
> +++ gcc/testsuite/g++.dg/cpp/elifdef-7.C	2024-09-13 10:23:22.291230601 +0200
> @@ -6,7 +6,7 @@
>  #undef B
>  
>  #if 0
> -#elifdef A	// { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifdef A	// { dg-error "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #define M1 1
>  #endif
>  
> @@ -25,7 +25,7 @@
>  #endif
>  
>  #if 0
> -#elifndef B	// { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifndef B	// { dg-error "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #define M2 2
>  #endif
>  
> @@ -34,32 +34,32 @@
>  #endif
>  
>  #if 0
> -#elifdef A	// { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifdef A	// { dg-error "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #else
>  #error "#elifdef A did not apply"
>  #endif
>  
>  #if 0
> -#elifndef B	// { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifndef B	// { dg-error "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #else
>  #error "#elifndef B did not apply"
>  #endif
>  
>  #if 1
> -#elifdef A	// { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifdef A	// { dg-error "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #endif
>  
>  #if 1
> -#elifndef B	// { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifndef B	// { dg-error "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #endif
>  
>  // As with #elif, the syntax of the new directives is relaxed after a
>     non-skipped group. 
>  
>  #if 1
> -#elifdef x * y	// { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifdef x * y	// { dg-error "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #endif
>  
>  #if 1
> -#elifndef !	// { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
> +#elifndef !	// { dg-error "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
>  #endif
> --- gcc/testsuite/g++.dg/cpp/embed-1.C.jj	2024-09-12 23:12:54.031424116 +0200
> +++ gcc/testsuite/g++.dg/cpp/embed-1.C	2024-09-13 10:24:00.101708382 +0200
> @@ -6,9 +6,9 @@
>  #endif
>  
>  int a =
> -#embed __FILE__ limit (1) // { dg-error "#embed is a GCC extension" }
> +#embed __FILE__ limit (1) // { dg-error "'#embed' is a GCC extension" }
>  ;
>  int b =
>  (__extension__
> -#embed __FILE__ limit (1) // { dg-error "#embed is a GCC extension" }
> +#embed __FILE__ limit (1) // { dg-error "'#embed' is a GCC extension" }
>  );
> --- gcc/testsuite/g++.dg/cpp/embed-2.C.jj	2024-09-12 23:12:54.031424116 +0200
> +++ gcc/testsuite/g++.dg/cpp/embed-2.C	2024-09-13 10:24:24.383373016 +0200
> @@ -6,9 +6,9 @@
>  #endif
>  
>  int a =
> -#embed __FILE__ limit (1) // { dg-warning "#embed is a GCC extension" }
> +#embed __FILE__ limit (1) // { dg-warning "'#embed' is a GCC extension" }
>  ;
>  int b =
>  (__extension__
> -#embed __FILE__ limit (1) // { dg-warning "#embed is a GCC extension" }
> +#embed __FILE__ limit (1) // { dg-warning "'#embed' is a GCC extension" }
>  );
> --- gcc/testsuite/g++.dg/cpp/pedantic-errors.C.jj	2020-01-14 20:02:46.701611062 +0100
> +++ gcc/testsuite/g++.dg/cpp/pedantic-errors.C	2024-09-13 10:53:57.298943459 +0200
> @@ -2,4 +2,4 @@
>  /* { dg-options "-std=c++98 -pedantic-errors" } */
>  
>  #if 1   
> -#endif 1 /* { dg-error "extra tokens at end of #endif directive" } */
> +#endif 1 /* { dg-error "extra tokens at end of '#endif' directive" } */
> --- gcc/testsuite/g++.dg/cpp/warning-1.C.jj	2022-08-25 20:34:49.333893224 +0200
> +++ gcc/testsuite/g++.dg/cpp/warning-1.C	2024-09-13 10:37:37.761422912 +0200
> @@ -3,4 +3,4 @@
>  // { dg-options "-pedantic-errors" }
>  
>  #warning example text /* { dg-warning "example text" } */
> -// { dg-error "#warning before C\\\+\\\+23 is a GCC extension" "pedantic" { target c++20_down } .-1 }
> +// { dg-error "'#warning' before C\\\+\\\+23 is a GCC extension" "pedantic" { target c++20_down } .-1 }
> --- gcc/testsuite/g++.dg/cpp/warning-2.C.jj	2022-08-25 20:34:49.333893224 +0200
> +++ gcc/testsuite/g++.dg/cpp/warning-2.C	2024-09-13 10:37:57.462151052 +0200
> @@ -3,4 +3,4 @@
>  // { dg-options "-pedantic" }
>  
>  #warning example text /* { dg-warning "example text" } */
> -// { dg-warning "#warning before C\\\+\\\+23 is a GCC extension" "pedantic" { target c++20_down } .-1 }
> +// { dg-warning "'#warning' before C\\\+\\\+23 is a GCC extension" "pedantic" { target c++20_down } .-1 }
> --- gcc/testsuite/g++.dg/ext/bitint1.C.jj	2023-09-08 11:29:20.119767813 +0200
> +++ gcc/testsuite/g++.dg/ext/bitint1.C	2024-09-13 11:37:09.095581218 +0200
> @@ -3,7 +3,7 @@
>  
>  _BitInt(63) a;			// { dg-error "expected" }
>  unsigned _BitInt(31) b;		// { dg-error "expected" }
> -int c = 21wb;			// { dg-error "invalid suffix \"wb\" on integer constant" "" { target c++98_only } }
> +int c = 21wb;			// { dg-error "invalid suffix 'wb' on integer constant" "" { target c++98_only } }
>  				// { dg-error "unable to find numeric literal operator 'operator\"\"wb'" "" { target c++11 } .-1 }
> -long long d = 60594869054uwb;	// { dg-error "invalid suffix \"uwb\" on integer constant" "" { target c++98_only } }
> +long long d = 60594869054uwb;	// { dg-error "invalid suffix 'uwb' on integer constant" "" { target c++98_only } }
>  				// { dg-error "unable to find numeric literal operator 'operator\"\"uwb'" "" { target c++11 } .-1 }
> --- gcc/testsuite/g++.dg/ext/bitint2.C.jj	2023-09-08 11:29:20.119767813 +0200
> +++ gcc/testsuite/g++.dg/ext/bitint2.C	2024-09-13 11:37:40.370171647 +0200
> @@ -4,7 +4,7 @@
>  
>  _BitInt(63) a;			// { dg-error "expected" }
>  unsigned _BitInt(31) b;		// { dg-error "expected" }
> -int c = 21wb;			// { dg-error "invalid suffix \"wb\" on integer constant" "" { target c++98_only } }
> +int c = 21wb;			// { dg-error "invalid suffix 'wb' on integer constant" "" { target c++98_only } }
>  				// { dg-error "unable to find numeric literal operator 'operator\"\"wb'" "" { target c++11 } .-1 }
> -long long d = 60594869054uwb;	// { dg-error "invalid suffix \"uwb\" on integer constant" "" { target c++98_only } }
> +long long d = 60594869054uwb;	// { dg-error "invalid suffix 'uwb' on integer constant" "" { target c++98_only } }
>  				// { dg-error "unable to find numeric literal operator 'operator\"\"uwb'" "" { target c++11 } .-1 }
> 
> 	Jakub
> 
>
Jakub Jelinek Sept. 13, 2024, 11:46 a.m. UTC | #2
On Fri, Sep 13, 2024 at 01:19:02PM +0200, Richard Biener wrote:
> The genmatch.cc parts are OK - I wonder how much the new dependences
> push gimple-match* and generic-match* compilation to the end?

Only time will tell.
Looking at my past 3 x86_64-linux bootstraps (-j32) but I'm doing i686-linux
bootstrap concurrently (also -j32) - 2 without the patch, one with it,
the g*-match*.cc files were generated always in the same minute as
config.state and in the 2 older bootstraps first g*-match*.o was finished
~4 minutes after config.state and last ~6 minutes after it, while
in the latest bootstrap first g*-match*.o was ready ~1 minute after
config.state and last ~4 minutes after it.
Toplevel config.status to make -j32 bootstrap time was 86minutes
in the unpatched build, 76minutes in patched, but this really varies
quite a lot.
Basically, the old dependencies forced all non-generated files to wait
until all generated files were generated, the new dependencies force
all non-generated *.o files to wait until all but g*match* generated files
were generated and all non-generated *.o files but libcommon.a to wait
until all g*match* generated files were generated.  So, one pretty much
needs to generate the non-g*match* first, then compile libcommon.a (36
small objects), then generate g*match* and then compile the rest.
So, perhaps on > 36 slow CPUs in theory it might be slightly slower,
because there will be another time frame where those further CPUs are idle.

	Jakub
diff mbox series

Patch

--- libcpp/include/cpplib.h.jj	2024-09-12 23:12:54.044423930 +0200
+++ libcpp/include/cpplib.h	2024-09-12 23:13:32.245876199 +0200
@@ -649,6 +649,13 @@  struct cpp_options
   cpp_main_search main_search : 8;
 };
 
+#if GCC_VERSION >= 3005
+#define ATTRIBUTE_CPP_PPDIAG(m, n) \
+  __attribute__ ((__format__ (__gcc_diag__, m , n))) ATTRIBUTE_NONNULL(m)
+#else
+#define ATTRIBUTE_CPP_PPDIAG(m, n) ATTRIBUTE_NONNULL(m)
+#endif
+
 /* Diagnostic levels.  To get a diagnostic without associating a
    position in the translation unit with it, use cpp_error_with_line
    with a line number of zero.  */
@@ -754,7 +761,7 @@  struct cpp_callbacks
 		      enum cpp_warning_reason,
 		      rich_location *,
 		      const char *, va_list *)
-       ATTRIBUTE_FPTR_PRINTF(5,0);
+       ATTRIBUTE_CPP_PPDIAG (5,0);
 
   /* Callbacks for when a macro is expanded, or tested (whether
      defined or not at the time) in #ifdef, #ifndef or "defined".  */
@@ -1351,24 +1359,24 @@  cpp_num cpp_num_sign_extend (cpp_num, si
 /* Output a diagnostic of some kind.  */
 extern bool cpp_error (cpp_reader *, enum cpp_diagnostic_level,
 		       const char *msgid, ...)
-  ATTRIBUTE_PRINTF_3;
+  ATTRIBUTE_CPP_PPDIAG (3, 4);
 extern bool cpp_warning (cpp_reader *, enum cpp_warning_reason,
 			 const char *msgid, ...)
-  ATTRIBUTE_PRINTF_3;
+  ATTRIBUTE_CPP_PPDIAG (3, 4);
 extern bool cpp_pedwarning (cpp_reader *, enum cpp_warning_reason,
 			    const char *msgid, ...)
-  ATTRIBUTE_PRINTF_3;
+  ATTRIBUTE_CPP_PPDIAG (3, 4);
 extern bool cpp_warning_syshdr (cpp_reader *, enum cpp_warning_reason reason,
 				const char *msgid, ...)
-  ATTRIBUTE_PRINTF_3;
+  ATTRIBUTE_CPP_PPDIAG (3, 4);
 
 /* As their counterparts above, but use RICHLOC.  */
 extern bool cpp_warning_at (cpp_reader *, enum cpp_warning_reason,
 			    rich_location *richloc, const char *msgid, ...)
-  ATTRIBUTE_PRINTF_4;
+  ATTRIBUTE_CPP_PPDIAG (4, 5);
 extern bool cpp_pedwarning_at (cpp_reader *, enum cpp_warning_reason,
 			       rich_location *richloc, const char *msgid, ...)
-  ATTRIBUTE_PRINTF_4;
+  ATTRIBUTE_CPP_PPDIAG (4, 5);
 
 /* Output a diagnostic with "MSGID: " preceding the
    error string of errno.  No location is printed.  */
@@ -1385,27 +1393,27 @@  extern bool cpp_errno_filename (cpp_read
 extern bool cpp_error_with_line (cpp_reader *, enum cpp_diagnostic_level,
 				 location_t, unsigned,
 				 const char *msgid, ...)
-  ATTRIBUTE_PRINTF_5;
+  ATTRIBUTE_CPP_PPDIAG (5, 6);
 extern bool cpp_warning_with_line (cpp_reader *, enum cpp_warning_reason,
 				   location_t, unsigned,
 				   const char *msgid, ...)
-  ATTRIBUTE_PRINTF_5;
+  ATTRIBUTE_CPP_PPDIAG (5, 6);
 extern bool cpp_pedwarning_with_line (cpp_reader *, enum cpp_warning_reason,
 				      location_t, unsigned,
 				      const char *msgid, ...)
-  ATTRIBUTE_PRINTF_5;
+  ATTRIBUTE_CPP_PPDIAG (5, 6);
 extern bool cpp_warning_with_line_syshdr (cpp_reader *, enum cpp_warning_reason,
 					  location_t, unsigned,
 					  const char *msgid, ...)
-  ATTRIBUTE_PRINTF_5;
+  ATTRIBUTE_CPP_PPDIAG (5, 6);
 
 extern bool cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level,
 			  location_t src_loc, const char *msgid, ...)
-  ATTRIBUTE_PRINTF_4;
+  ATTRIBUTE_CPP_PPDIAG (4, 5);
 
 extern bool cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level,
 			  rich_location *richloc, const char *msgid, ...)
-  ATTRIBUTE_PRINTF_4;
+  ATTRIBUTE_CPP_PPDIAG (4, 5);
 
 /* In lex.cc */
 extern int cpp_ideq (const cpp_token *, const char *);
--- libcpp/Makefile.in.jj	2024-06-03 20:17:52.323099467 +0200
+++ libcpp/Makefile.in	2024-09-12 23:13:32.244876213 +0200
@@ -263,7 +263,7 @@  po/$(PACKAGE).pot: $(libcpp_a_SOURCES)
 	  --keyword=SYNTAX_ERROR --keyword=SYNTAX_ERROR2 \
 	  --copyright-holder="Free Software Foundation, Inc." \
 	  --msgid-bugs-address="https://gcc.gnu.org/bugs/" \
-	  --language=c -o po/$(PACKAGE).pot.tmp $^
+	  --language=GCC-source -o po/$(PACKAGE).pot.tmp $^
 	sed 's:$(srcdir)/::g' <po/$(PACKAGE).pot.tmp >po/$(PACKAGE).pot
 	rm po/$(PACKAGE).pot.tmp
 
--- libcpp/errors.cc.jj	2024-01-03 22:33:38.347691673 +0100
+++ libcpp/errors.cc	2024-09-12 23:13:32.246876185 +0200
@@ -54,7 +54,7 @@  cpp_diagnostic_get_current_location (cpp
 
 /* Print a diagnostic at the given location.  */
 
-ATTRIBUTE_FPTR_PRINTF(5,0)
+ATTRIBUTE_CPP_PPDIAG (5, 0)
 static bool
 cpp_diagnostic_at (cpp_reader * pfile, enum cpp_diagnostic_level level,
 		   enum cpp_warning_reason reason, rich_location *richloc,
@@ -71,7 +71,7 @@  cpp_diagnostic_at (cpp_reader * pfile, e
 
 /* Print a diagnostic at the location of the previously lexed token.  */
 
-ATTRIBUTE_FPTR_PRINTF(4,0)
+ATTRIBUTE_CPP_PPDIAG (4, 0)
 static bool
 cpp_diagnostic (cpp_reader * pfile, enum cpp_diagnostic_level level,
 		enum cpp_warning_reason reason,
@@ -190,7 +190,7 @@  cpp_pedwarning_at (cpp_reader * pfile, e
 
 /* Print a diagnostic at a specific location.  */
 
-ATTRIBUTE_FPTR_PRINTF(6,0)
+ATTRIBUTE_CPP_PPDIAG (6, 0)
 static bool
 cpp_diagnostic_with_line (cpp_reader * pfile, enum cpp_diagnostic_level level,
 			  enum cpp_warning_reason reason,
--- libcpp/charset.cc.jj	2024-09-12 23:12:54.042423959 +0200
+++ libcpp/charset.cc	2024-09-12 23:13:32.241876256 +0200
@@ -867,8 +867,8 @@  cpp_host_to_exec_charset (cpp_reader *pf
   if (c > LAST_POSSIBLY_BASIC_SOURCE_CHAR)
     {
       cpp_error (pfile, CPP_DL_ICE,
-		 "character 0x%lx is not in the basic source character set\n",
-		 (unsigned long)c);
+		 "character 0x%lx is not in the basic source character set",
+		 (unsigned long) c);
       return 0;
     }
 
@@ -1550,10 +1550,10 @@  _cpp_valid_ucn (cpp_reader *pfile, const
   else if (CPP_OPTION (pfile, cpp_warn_c90_c99_compat) > 0
 	   && !CPP_OPTION (pfile, cplusplus))
     cpp_error (pfile, CPP_DL_WARNING,
-	       "C99's universal character names are incompatible with C90");
+	       "C99%'s universal character names are incompatible with C90");
   else if (CPP_WTRADITIONAL (pfile) && identifier_pos == 0)
     cpp_warning (pfile, CPP_W_TRADITIONAL,
-	         "the meaning of '\\%c' is different in traditional C",
+	         "the meaning of %<\\%c%> is different in traditional C",
 	         (int) str[-1]);
 
   result = 0;
@@ -1592,7 +1592,7 @@  _cpp_valid_ucn (cpp_reader *pfile, const
 	      *cp = 0;
 	      return false;
 	    }
-	  cpp_error (pfile, CPP_DL_ERROR, "'\\N' not followed by '{'");
+	  cpp_error (pfile, CPP_DL_ERROR, "%<\\N%> not followed by %<{%>");
 	}
       else
 	{
@@ -1656,13 +1656,13 @@  _cpp_valid_ucn (cpp_reader *pfile, const
 			  && (!CPP_OPTION (pfile, delimited_escape_seqs)
 			      || !strict))
 			ret = cpp_warning (pfile, CPP_W_UNICODE,
-					   "\\N{%.*s} is not a valid "
+					   "%<\\N{%.*s}%> is not a valid "
 					   "universal character; treating it "
 					   "as separate tokens",
 					   (int) (str - name), name);
 		      else
 			cpp_error (pfile, CPP_DL_ERROR,
-				   "\\N{%.*s} is not a valid universal "
+				   "%<\\N{%.*s}%> is not a valid universal "
 				   "character", (int) (str - name), name);
 
 		      /* Try to do a loose name lookup according to
@@ -1672,7 +1672,7 @@  _cpp_valid_ucn (cpp_reader *pfile, const
 						       str - name, canon_name);
 		      if (result != (cppchar_t) -1 && ret)
 			cpp_error (pfile, CPP_DL_NOTE,
-				   "did you mean \\N{%s}?", canon_name);
+				   "did you mean %<\\N{%s}%>?", canon_name);
 		      else
 			result = 0xC0;
 		      if (identifier_pos
@@ -1690,7 +1690,7 @@  _cpp_valid_ucn (cpp_reader *pfile, const
 	  else if (identifier_pos)
 	    {
 	      cpp_warning (pfile, CPP_W_UNICODE,
-			   "'\\N{' not terminated with '}' after %.*s; "
+			   "%<\\N{%> not terminated with %<}%> after %.*s; "
 			   "treating it as separate tokens",
 			   (int) (str - base), base);
 	      *cp = 0;
@@ -1699,7 +1699,7 @@  _cpp_valid_ucn (cpp_reader *pfile, const
 	  else
 	    {
 	      cpp_error (pfile, CPP_DL_ERROR,
-			 "'\\N{' not terminated with '}' after %.*s",
+			 "%<\\N{%> not terminated with %<}%> after %.*s",
 			 (int) (str - base), base);
 	      result = 1;
 	    }
@@ -1707,7 +1707,7 @@  _cpp_valid_ucn (cpp_reader *pfile, const
     }
   else
     {
-      cpp_error (pfile, CPP_DL_ICE, "In _cpp_valid_ucn but not a UCN");
+      cpp_error (pfile, CPP_DL_ICE, "in %<_cpp_valid_ucn%> but not a UCN");
       length = 4;
     }
 
@@ -1775,7 +1775,7 @@  _cpp_valid_ucn (cpp_reader *pfile, const
     {
       if (delimited)
 	cpp_warning (pfile, CPP_W_UNICODE,
-		     "'\\u{' not terminated with '}' after %.*s; "
+		     "%<\\u{%> not terminated with %<}%> after %.*s; "
 		     "treating it as separate tokens",
 		     (int) (str - base), base);
       *cp = 0;
@@ -1791,7 +1791,7 @@  _cpp_valid_ucn (cpp_reader *pfile, const
 		   (int) (str - base), base);
       else
 	cpp_error (pfile, CPP_DL_ERROR,
-		   "'\\u{' not terminated with '}' after %.*s",
+		   "%<\\u{%> not terminated with %<}%> after %.*s",
 		   (int) (str - base), base);
       result = 1;
     }
@@ -1821,7 +1821,7 @@  _cpp_valid_ucn (cpp_reader *pfile, const
       if (CPP_OPTION (pfile, warn_dollars) && !pfile->state.skipping)
 	{
 	  CPP_OPTION (pfile, warn_dollars) = 0;
-	  cpp_error (pfile, CPP_DL_PEDWARN, "'$' in identifier or number");
+	  cpp_error (pfile, CPP_DL_PEDWARN, "%<$%> in identifier or number");
 	}
       NORMALIZE_STATE_UPDATE_IDNUM (nst, result);
     }
@@ -2096,7 +2096,7 @@  convert_hex (cpp_reader *pfile, const uc
 
   if (CPP_WTRADITIONAL (pfile))
     cpp_warning (pfile, CPP_W_TRADITIONAL,
-	         "the meaning of '\\x' is different in traditional C");
+	         "the meaning of %<\\x%> is different in traditional C");
 
   /* Skip 'x'.  */
   from++;
@@ -2144,13 +2144,13 @@  convert_hex (cpp_reader *pfile, const uc
   if (!digits_found)
     {
       cpp_error (pfile, CPP_DL_ERROR,
-		 "\\x used with no following hex digits");
+		 "%<\\x%> used with no following hex digits");
       return from;
     }
   else if (delimited)
     {
       cpp_error (pfile, CPP_DL_ERROR,
-		 "'\\x{' not terminated with '}' after %.*s",
+		 "%<\\x{%> not terminated with %<}%> after %.*s",
 		 (int) (from - base), base);
       return from;
     }
@@ -2201,7 +2201,7 @@  convert_oct (cpp_reader *pfile, const uc
       from++;
       extend_char_range (&char_range, loc_reader);
       if (from == limit || *from != '{')
-	cpp_error (pfile, CPP_DL_ERROR, "'\\o' not followed by '{'");
+	cpp_error (pfile, CPP_DL_ERROR, "%<\\o%> not followed by %<}%>");
       else
 	{
 	  from++;
@@ -2247,7 +2247,7 @@  convert_oct (cpp_reader *pfile, const uc
       else
 	{
 	  cpp_error (pfile, CPP_DL_ERROR,
-		     "'\\o{' not terminated with '}' after %.*s",
+		     "%<\\o{%> not terminated with %<}%> after %.*s",
 		     (int) (from - base), base);
 	  return from;
 	}
@@ -2309,7 +2309,7 @@  convert_escape (cpp_reader *pfile, const
       if (uneval)
 	cpp_pedwarning (pfile, CPP_W_PEDANTIC,
 			"numeric escape sequence in unevaluated string: "
-			"'\\%c'", (int) c);
+			"%<\\%c%>", (int) c);
       return convert_hex (pfile, from, limit, tbuf, cvt,
 			  char_range, loc_reader, ranges);
 
@@ -2319,7 +2319,7 @@  convert_escape (cpp_reader *pfile, const
       if (uneval)
 	cpp_pedwarning (pfile, CPP_W_PEDANTIC,
 			"numeric escape sequence in unevaluated string: "
-			"'\\%c'", (int) c);
+			"%<\\%c%>", (int) c);
       return convert_oct (pfile, from, limit, tbuf, cvt,
 			  char_range, loc_reader, ranges);
 
@@ -2346,13 +2346,13 @@  convert_escape (cpp_reader *pfile, const
     case 'a':
       if (CPP_WTRADITIONAL (pfile))
 	cpp_warning (pfile, CPP_W_TRADITIONAL,
-		     "the meaning of '\\a' is different in traditional C");
+		     "the meaning of %<\\a%> is different in traditional C");
       c = charconsts[0];
       break;
 
     case 'e': case 'E':
       cpp_pedwarning (pfile, CPP_W_PEDANTIC,
-		      "non-ISO-standard escape sequence, '\\%c'", (int) c);
+		      "non-ISO-standard escape sequence, %<\\%c%>", (int) c);
       c = charconsts[2];
       break;
 
@@ -2360,7 +2360,7 @@  convert_escape (cpp_reader *pfile, const
     unknown:
       if (ISGRAPH (c))
 	cpp_error (pfile, CPP_DL_PEDWARN,
-		   "unknown escape sequence: '\\%c'", (int) c);
+		   "unknown escape sequence: %<\\%c%>", (int) c);
       else
 	{
 	  encoding_rich_location rich_loc (pfile);
@@ -2370,7 +2370,7 @@  convert_escape (cpp_reader *pfile, const
 	  char buf[32];
 	  sprintf(buf, "%03o", (int) c);
 	  cpp_error_at (pfile, CPP_DL_PEDWARN, &rich_loc,
-			"unknown escape sequence: '\\%s'", buf);
+			"unknown escape sequence: %<\\%s%>", buf);
 	}
     }
 
@@ -2655,7 +2655,7 @@  cpp_interpret_string_ranges (cpp_reader
   bool (*saved_diagnostic_handler) (cpp_reader *, enum cpp_diagnostic_level,
 				    enum cpp_warning_reason, rich_location *,
 				    const char *, va_list *)
-    ATTRIBUTE_FPTR_PRINTF(5,0);
+    ATTRIBUTE_CPP_PPDIAG (5, 0);
 
   saved_diagnostic_handler = pfile->cb.diagnostic;
   pfile->cb.diagnostic = noop_diagnostic_cb;
@@ -2704,7 +2704,7 @@  count_source_chars (cpp_reader *pfile, c
   bool (*saved_diagnostic_handler) (cpp_reader *, enum cpp_diagnostic_level,
 				    enum cpp_warning_reason, rich_location *,
 				    const char *, va_list *)
-    ATTRIBUTE_FPTR_PRINTF(5,0);
+    ATTRIBUTE_CPP_PPDIAG (5, 0);
   saved_diagnostic_handler = pfile->cb.diagnostic;
   pfile->cb.diagnostic = noop_diagnostic_cb;
   convert_f save_func = pfile->narrow_cset_desc.func;
@@ -2803,7 +2803,7 @@  narrow_str_to_charconst (cpp_reader *pfi
       if (type != CPP_UTF8CHAR)
 	cpp_error (pfile, CPP_DL_WARNING,
 		   "multi-character literal with %ld characters exceeds "
-		   "'int' size of %ld bytes", (long) i, (long) max_chars);
+		   "%<int%> size of %ld bytes", (long) i, (long) max_chars);
       else if (src_chars > 2)
 	cpp_error (pfile, CPP_DL_ERROR,
 		   "multi-character literal cannot have an encoding prefix");
--- libcpp/directives.cc.jj	2024-09-12 23:12:54.042423959 +0200
+++ libcpp/directives.cc	2024-09-13 10:50:58.586398187 +0200
@@ -235,7 +235,7 @@  check_eol_1 (cpp_reader *pfile, bool exp
   if (! SEEN_EOL () && (expand
 			? cpp_get_token (pfile)
 			: _cpp_lex_token (pfile))->type != CPP_EOF)
-    cpp_pedwarning (pfile, reason, "extra tokens at end of #%s directive",
+    cpp_pedwarning (pfile, reason, "extra tokens at end of %<#%s%> directive",
 		    pfile->directive->name);
 }
 
@@ -387,8 +387,8 @@  directive_diagnostics (cpp_reader *pfile
       if (dir->origin == EXTENSION
 	  && !(dir == &dtable[T_IMPORT] && CPP_OPTION (pfile, objc)))
 	warned
-	  = cpp_pedwarning (pfile, CPP_W_PEDANTIC, "#%s is a GCC extension",
-			    dir->name);
+	  = cpp_pedwarning (pfile, CPP_W_PEDANTIC,
+			    "%<#%s%> is a GCC extension", dir->name);
       if (!warned && dir == &dtable[T_WARNING])
 	{
 	  if (CPP_PEDANTIC (pfile) && !CPP_OPTION (pfile, warning_directive))
@@ -396,18 +396,18 @@  directive_diagnostics (cpp_reader *pfile
 	      if (CPP_OPTION (pfile, cplusplus))
 		warned
 		  = cpp_pedwarning (pfile, CPP_W_CXX23_EXTENSIONS,
-				    "#%s before C++23 is a GCC extension",
+				    "%<#%s%> before C++23 is a GCC extension",
 				    dir->name);
 	      else
 		warned
 		  = cpp_pedwarning (pfile, CPP_W_PEDANTIC,
-				    "#%s before C23 is a GCC extension",
+				    "%<#%s%> before C23 is a GCC extension",
 				    dir->name);
 	    }
 
 	  if (!warned && CPP_OPTION (pfile, cpp_warn_c11_c23_compat) > 0)
 	    warned = cpp_warning (pfile, CPP_W_C11_C23_COMPAT,
-				  "#%s before C23 is a GCC extension",
+				  "%<#%s%> before C23 is a GCC extension",
 				  dir->name);
 	}
 
@@ -415,7 +415,7 @@  directive_diagnostics (cpp_reader *pfile
 	   || (dir == &dtable[T_IMPORT] && !CPP_OPTION (pfile, objc)))
 	  && !warned)
 	cpp_warning (pfile, CPP_W_DEPRECATED,
-                     "#%s is a deprecated GCC extension", dir->name);
+                     "%<#%s%> is a deprecated GCC extension", dir->name);
     }
 
   /* Traditionally, a directive is ignored unless its # is in
@@ -428,15 +428,15 @@  directive_diagnostics (cpp_reader *pfile
     {
       if (dir == &dtable[T_ELIF])
 	cpp_warning (pfile, CPP_W_TRADITIONAL,
-		     "suggest not using #elif in traditional C");
+		     "suggest not using %<#elif%> in traditional C");
       else if (indented && dir->origin == KANDR)
 	cpp_warning (pfile, CPP_W_TRADITIONAL,
-		     "traditional C ignores #%s with the # indented",
+		     "traditional C ignores %<#%s%> with the %<#%> indented",
 		     dir->name);
       else if (!indented && dir->origin != KANDR)
 	cpp_warning (pfile, CPP_W_TRADITIONAL,
-		     "suggest hiding #%s from traditional C with an indented #",
-		     dir->name);
+		     "suggest hiding %<#%s%> from traditional C with an "
+		     "indented %<#%>", dir->name);
     }
 }
 
@@ -648,17 +648,17 @@  lex_macro_node (cpp_reader *pfile, bool
       if (is_def_or_undef
 	  && node == pfile->spec_nodes.n_defined)
 	cpp_error (pfile, CPP_DL_ERROR,
-		   "\"%s\" cannot be used as a macro name",
+		   "%qs cannot be used as a macro name",
 		   NODE_NAME (node));
       else if (! (node->flags & NODE_POISONED))
 	return node;
     }
   else if (token->flags & NAMED_OP)
     cpp_error (pfile, CPP_DL_ERROR,
-       "\"%s\" cannot be used as a macro name as it is an operator in C++",
-	       NODE_NAME (token->val.node.node));
+	       "%qs cannot be used as a macro name as it is an operator "
+	       "in C++", NODE_NAME (token->val.node.node));
   else if (token->type == CPP_EOF)
-    cpp_error (pfile, CPP_DL_ERROR, "no macro name given in #%s directive",
+    cpp_error (pfile, CPP_DL_ERROR, "no macro name given in %<#%s%> directive",
 	       pfile->directive->name);
   else
     cpp_error (pfile, CPP_DL_ERROR, "macro names must be identifiers");
@@ -714,11 +714,11 @@  do_undef (cpp_reader *pfile)
 	{
 	  if (node->flags & NODE_WARN)
 	    cpp_error (pfile, CPP_DL_WARNING,
-		       "undefining \"%s\"", NODE_NAME (node));
+		       "undefining %qs", NODE_NAME (node));
 	  else if (cpp_builtin_macro_p (node)
 		   && CPP_OPTION (pfile, warn_builtin_macro_redefined))
 	    cpp_warning (pfile, CPP_W_BUILTIN_MACRO_REDEFINED,
-			 "undefining \"%s\"", NODE_NAME (node));
+			 "undefining %qs", NODE_NAME (node));
 
 	  if (node->value.macro
 	      && CPP_OPTION (pfile, warn_unused_macros))
@@ -775,7 +775,8 @@  glue_header_name (cpp_reader *pfile)
 	break;
       if (token->type == CPP_EOF)
 	{
-	  cpp_error (pfile, CPP_DL_ERROR, "missing terminating > character");
+	  cpp_error (pfile, CPP_DL_ERROR,
+		     "missing terminating %<>%> character");
 	  break;
 	}
 
@@ -831,11 +832,11 @@  parse_include (cpp_reader *pfile, int *p
       const unsigned char *dir;
 
       if (pfile->directive == &dtable[T_PRAGMA])
-	dir = UC"pragma dependency";
+	dir = UC"pragma GCC dependency";
       else
 	dir = pfile->directive->name;
-      cpp_error (pfile, CPP_DL_ERROR, "#%s expects \"FILENAME\" or <FILENAME>",
-		 dir);
+      cpp_error (pfile, CPP_DL_ERROR,
+		 "%<#%s%> expects %<\"FILENAME\"%> or %<<FILENAME>%>", dir);
 
       return NULL;
     }
@@ -890,8 +891,8 @@  do_include_common (cpp_reader *pfile, en
   if (pfile->line_table->depth >= CPP_OPTION (pfile, max_include_depth))
     cpp_error (pfile, 
 	       CPP_DL_ERROR, 
-	       "#include nested depth %u exceeds maximum of %u"
-	       " (use -fmax-include-depth=DEPTH to increase the maximum)",
+	       "%<#include%> nested depth %u exceeds maximum of %u"
+	       " (use %<-fmax-include-depth=DEPTH%> to increase the maximum)",
 	       pfile->line_table->depth,
 	       CPP_OPTION (pfile, max_include_depth));
   else
@@ -935,7 +936,7 @@  do_include_next (cpp_reader *pfile)
   if (_cpp_in_main_source_file (pfile))
     {
       cpp_error (pfile, CPP_DL_WARNING,
-		 "#include_next in primary source file");
+		 "%<#include_next%> in primary source file");
       type = IT_INCLUDE;
     }
   do_include_common (pfile, type);
@@ -1090,7 +1091,7 @@  _cpp_parse_embed_params (cpp_reader *pfi
 	    {
 	      if (params->has_embed)
 		{
-		  cpp_error (pfile, CPP_DL_ERROR, "expected ')'");
+		  cpp_error (pfile, CPP_DL_ERROR, "expected %<)%>");
 		  return false;
 		}
 	    }
@@ -1107,8 +1108,9 @@  _cpp_parse_embed_params (cpp_reader *pfi
 	      if (!params->has_embed)
 		cpp_error_with_line (pfile, CPP_DL_ERROR,
 				     params->base64.base_run.base->src_loc, 0,
-				     "'gnu::base64' parameter conflicts with "
-				     "'limit' or 'gnu::offset' parameters");
+				     "%<gnu::base64%> parameter conflicts "
+				     "with %<limit%> or %<gnu::offset%> "
+				     "parameters");
 	    }
 	  else if (params->base64.count == 0
 		   && CPP_OPTION (pfile, preprocessed))
@@ -1116,7 +1118,7 @@  _cpp_parse_embed_params (cpp_reader *pfi
 	      ret = false;
 	      if (!params->has_embed)
 		cpp_error_with_line (pfile, CPP_DL_ERROR, params->loc, 0,
-				     "'gnu::base64' parameter required in "
+				     "%<gnu::base64%> parameter required in "
 				     "preprocessed source");
 	    }
 	  return ret;
@@ -1137,7 +1139,7 @@  _cpp_parse_embed_params (cpp_reader *pfi
 	  token = _cpp_get_token_no_padding (pfile);
 	  if (token->type != CPP_COLON)
 	    {
-	      cpp_error (pfile, CPP_DL_ERROR, "expected ':'");
+	      cpp_error (pfile, CPP_DL_ERROR, "expected %<:%>");
 	      return false;
 	    }
 	  token = _cpp_get_token_no_padding (pfile);
@@ -1225,7 +1227,7 @@  _cpp_parse_embed_params (cpp_reader *pfi
 	}
       if (param_kind != (size_t) -1 && token->type != CPP_OPEN_PAREN)
 	cpp_error_with_line (pfile, CPP_DL_ERROR, loc, 0,
-			     "expected '('");
+			     "expected %<(%>");
       else if (param_kind == EMBED_PARAM_LIMIT
 	       || param_kind == EMBED_PARAM_GNU_OFFSET)
 	{
@@ -1238,7 +1240,7 @@  _cpp_parse_embed_params (cpp_reader *pfi
 	    {
 	      if (res > INTTYPE_MAXIMUM (off_t))
 		cpp_error_with_line (pfile, CPP_DL_ERROR, loc, 0,
-				     "too large 'gnu::offset' argument");
+				     "too large %<gnu::offset%> argument");
 	      else
 		params->offset = res;
 	    }
@@ -1280,7 +1282,7 @@  _cpp_parse_embed_params (cpp_reader *pfi
 	      while (token->type == CPP_STRING);
 	      if (token->type != CPP_CLOSE_PAREN)
 		cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, 0,
-				     "expected ')'");
+				     "expected %<)%>");
 	    }
 	  else
 	    {
@@ -1330,7 +1332,7 @@  do_embed (cpp_reader *pfile)
   if (CPP_OPTION (pfile, traditional))
     {
       cpp_error (pfile, CPP_DL_ERROR, /* FIXME should be DL_SORRY */
-		 "#embed not supported in traditional C");
+		 "%<#embed%> not supported in traditional C");
       skip_rest_of_line (pfile);
       goto done;
     }
@@ -1339,10 +1341,10 @@  do_embed (cpp_reader *pfile)
     {
       if (CPP_OPTION (pfile, cplusplus))
 	cpp_error (pfile, CPP_DL_PEDWARN,
-		   "#%s is a GCC extension", "embed");
+		   "%<#%s%> is a GCC extension", "embed");
       else
 	cpp_error (pfile, CPP_DL_PEDWARN,
-		   "#%s before C23 is a GCC extension", "embed");
+		   "%<#%s%> before C23 is a GCC extension", "embed");
     }
 
   fname = parse_include (pfile, &angle_brackets, NULL, &params.loc);
@@ -1400,7 +1402,7 @@  read_flag (cpp_reader *pfile, unsigned i
     }
 
   if (token->type != CPP_EOF)
-    cpp_error (pfile, CPP_DL_ERROR, "invalid flag \"%s\" in line directive",
+    cpp_error (pfile, CPP_DL_ERROR, "invalid flag %qs in line directive",
 	       cpp_token_as_text (pfile, token));
   return 0;
 }
@@ -1467,10 +1469,11 @@  do_line (cpp_reader *pfile)
 		       &new_lineno, &wrapped))
     {
       if (token->type == CPP_EOF)
-	cpp_error (pfile, CPP_DL_ERROR, "unexpected end of file after #line");
+	cpp_error (pfile, CPP_DL_ERROR,
+		   "unexpected end of file after %<#line%>");
       else
 	cpp_error (pfile, CPP_DL_ERROR,
-		   "\"%s\" after #line is not a positive integer",
+		   "%qs after %<#line%> is not a positive integer",
 		   cpp_token_as_text (pfile, token));
       return;
     }
@@ -1492,7 +1495,7 @@  do_line (cpp_reader *pfile)
     }
   else if (token->type != CPP_EOF)
     {
-      cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
+      cpp_error (pfile, CPP_DL_ERROR, "%qs is not a valid filename",
 		 cpp_token_as_text (pfile, token));
       return;
     }
@@ -1533,7 +1536,7 @@  do_linemarker (cpp_reader *pfile)
       /* Unlike #line, there does not seem to be a way to get an EOF
 	 here.  So, it should be safe to always spell the token.  */
       cpp_error (pfile, CPP_DL_ERROR,
-		 "\"%s\" after # is not a positive integer",
+		 "%qs after # is not a positive integer",
 		 cpp_token_as_text (pfile, token));
       return;
     }
@@ -1573,7 +1576,7 @@  do_linemarker (cpp_reader *pfile)
     }
   else if (token->type != CPP_EOF)
     {
-      cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
+      cpp_error (pfile, CPP_DL_ERROR, "%qs is not a valid filename",
 		 cpp_token_as_text (pfile, token));
       return;
     }
@@ -1600,7 +1603,7 @@  do_linemarker (cpp_reader *pfile)
       if (!from)
 	{
 	  cpp_warning (pfile, CPP_W_NONE,
-		       "file \"%s\" linemarker ignored due to "
+		       "file %qs linemarker ignored due to "
 		       "incorrect nesting", new_file);
 	  return;
 	}
@@ -1769,7 +1772,7 @@  register_pragma_1 (cpp_reader *pfile, co
       else if (entry->allow_expansion != allow_name_expansion)
 	{
 	  cpp_error (pfile, CPP_DL_ICE,
-		     "registering pragmas in namespace \"%s\" with mismatched "
+		     "registering pragmas in namespace %qs with mismatched "
 		     "name expansion", space);
 	  return NULL;
 	}
@@ -1778,7 +1781,7 @@  register_pragma_1 (cpp_reader *pfile, co
   else if (allow_name_expansion)
     {
       cpp_error (pfile, CPP_DL_ICE,
-		 "registering pragma \"%s\" with name expansion "
+		 "registering pragma %qs with name expansion "
 		 "and no namespace", name);
       return NULL;
     }
@@ -1796,13 +1799,14 @@  register_pragma_1 (cpp_reader *pfile, co
   if (entry->is_nspace)
     clash:
     cpp_error (pfile, CPP_DL_ICE,
-	       "registering \"%s\" as both a pragma and a pragma namespace",
+	       "registering %qs as both a pragma and a pragma namespace",
 	       NODE_NAME (node));
   else if (space)
-    cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered",
+    cpp_error (pfile, CPP_DL_ICE, "%<#pragma %s %s%> is already registered",
 	       space, name);
   else
-    cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name);
+    cpp_error (pfile, CPP_DL_ICE, "%<#pragma %s%> is already registered",
+	       name);
 
   return NULL;
 }
@@ -2049,7 +2053,7 @@  static void
 do_pragma_once (cpp_reader *pfile)
 {
   if (_cpp_in_main_source_file (pfile))
-    cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
+    cpp_error (pfile, CPP_DL_WARNING, "%<#pragma once%> in main file");
 
   check_eol (pfile, false);
   _cpp_mark_file_once_only (pfile, pfile->buffer->file);
@@ -2072,7 +2076,7 @@  do_pragma_push_macro (cpp_reader *pfile)
     {
       location_t src_loc = pfile->cur_token[-1].src_loc;
       cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
-		 "invalid #pragma push_macro directive");
+			   "invalid %<#pragma push_macro%> directive");
       check_eol (pfile, false);
       skip_rest_of_line (pfile);
       return;
@@ -2129,7 +2133,7 @@  do_pragma_pop_macro (cpp_reader *pfile)
     {
       location_t src_loc = pfile->cur_token[-1].src_loc;
       cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
-		 "invalid #pragma pop_macro directive");
+			   "invalid %<#pragma pop_macro%> directive");
       check_eol (pfile, false);
       skip_rest_of_line (pfile);
       return;
@@ -2184,7 +2188,7 @@  do_pragma_poison (cpp_reader *pfile)
       if (tok->type != CPP_NAME)
 	{
 	  cpp_error (pfile, CPP_DL_ERROR,
-		     "invalid #pragma GCC poison directive");
+		     "invalid %<#pragma GCC poison%> directive");
 	  break;
 	}
 
@@ -2193,7 +2197,7 @@  do_pragma_poison (cpp_reader *pfile)
 	continue;
 
       if (cpp_macro_p (hp))
-	cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"",
+	cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro %qs",
 		   NODE_NAME (hp));
       _cpp_free_definition (hp);
       hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
@@ -2215,7 +2219,7 @@  do_pragma_system_header (cpp_reader *pfi
 {
   if (_cpp_in_main_source_file (pfile))
     cpp_error (pfile, CPP_DL_WARNING,
-	       "#pragma system_header ignored outside include file");
+	       "%<#pragma system_header%> ignored outside include file");
   else
     {
       check_eol (pfile, false);
@@ -2268,7 +2272,7 @@  do_pragma_warning_or_error (cpp_reader *
 					    CPP_STRING)
       || str.len == 0)
     {
-      cpp_error (pfile, CPP_DL_ERROR, "invalid \"#pragma GCC %s\" directive",
+      cpp_error (pfile, CPP_DL_ERROR, "invalid %<#pragma GCC %s%> directive",
 		 error ? "error" : "warning");
       return;
     }
@@ -2476,7 +2480,7 @@  _cpp_do__Pragma (cpp_reader *pfile, loca
       return 1;
     }
   cpp_error (pfile, CPP_DL_ERROR,
-	     "_Pragma takes a parenthesized string literal");
+	     "%<_Pragma%> takes a parenthesized string literal");
   return 0;
 }
 
@@ -2559,12 +2563,12 @@  do_else (cpp_reader *pfile)
   struct if_stack *ifs = buffer->if_stack;
 
   if (ifs == NULL)
-    cpp_error (pfile, CPP_DL_ERROR, "#else without #if");
+    cpp_error (pfile, CPP_DL_ERROR, "%<#else%> without %<#if%>");
   else
     {
       if (ifs->type == T_ELSE)
 	{
-	  cpp_error (pfile, CPP_DL_ERROR, "#else after #else");
+	  cpp_error (pfile, CPP_DL_ERROR, "%<#else%> after %<#else%>");
 	  cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
 			       "the conditional began here");
 	}
@@ -2592,12 +2596,13 @@  do_elif (cpp_reader *pfile)
   struct if_stack *ifs = buffer->if_stack;
 
   if (ifs == NULL)
-    cpp_error (pfile, CPP_DL_ERROR, "#%s without #if", pfile->directive->name);
+    cpp_error (pfile, CPP_DL_ERROR, "%<#%s%> without %<#if%>",
+	       pfile->directive->name);
   else
     {
       if (ifs->type == T_ELSE)
 	{
-	  cpp_error (pfile, CPP_DL_ERROR, "#%s after #else",
+	  cpp_error (pfile, CPP_DL_ERROR, "%<#%s%> after %<#else%>",
 		     pfile->directive->name);
 	  cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
 			       "the conditional began here");
@@ -2620,11 +2625,11 @@  do_elif (cpp_reader *pfile)
 	    {
 	      if (CPP_OPTION (pfile, cplusplus))
 		cpp_pedwarning (pfile, CPP_W_CXX23_EXTENSIONS,
-				"#%s before C++23 is a GCC extension",
+				"%<#%s%> before C++23 is a GCC extension",
 				pfile->directive->name);
 	      else
 		cpp_pedwarning (pfile, CPP_W_PEDANTIC,
-				"#%s before C23 is a GCC extension",
+				"%<#%s%> before C23 is a GCC extension",
 				pfile->directive->name);
 	    }
 	  pfile->state.skipping = 1;
@@ -2659,11 +2664,13 @@  do_elif (cpp_reader *pfile)
 		    {
 		      if (CPP_OPTION (pfile, cplusplus))
 			cpp_pedwarning (pfile, CPP_W_CXX23_EXTENSIONS,
-					"#%s before C++23 is a GCC extension",
+					"%<#%s%> before C++23 is a GCC "
+					"extension",
 					pfile->directive->name);
 		      else
 			cpp_pedwarning (pfile, CPP_W_PEDANTIC,
-					"#%s before C23 is a GCC extension",
+					"%<#%s%> before C23 is a GCC "
+					"extension",
 					pfile->directive->name);
 		    }
 		  pfile->state.skipping = skip;
@@ -2699,7 +2706,7 @@  do_endif (cpp_reader *pfile)
   struct if_stack *ifs = buffer->if_stack;
 
   if (ifs == NULL)
-    cpp_error (pfile, CPP_DL_ERROR, "#endif without #if");
+    cpp_error (pfile, CPP_DL_ERROR, "%<#endif%> without %<#if%>");
   else
     {
       /* Only check EOL if was not originally skipping.  */
@@ -2775,7 +2782,7 @@  parse_answer (cpp_reader *pfile, int typ
 	return true;
 
       cpp_error_with_line (pfile, CPP_DL_ERROR, pred_loc, 0,
-			   "missing '(' after predicate");
+			   "missing %<(%> after predicate");
       return false;
     }
 
@@ -2793,7 +2800,7 @@  parse_answer (cpp_reader *pfile, int typ
 
       if (token->type == CPP_EOF)
 	{
-	  cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer");
+	  cpp_error (pfile, CPP_DL_ERROR, "missing %<)%> to complete answer");
 	  return false;
 	}
 
@@ -2805,7 +2812,7 @@  parse_answer (cpp_reader *pfile, int typ
 
   if (!count)
     {
-      cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty");
+      cpp_error (pfile, CPP_DL_ERROR, "predicate%'s answer is empty");
       return false;
     }
 
@@ -2920,7 +2927,7 @@  do_assert (cpp_reader *pfile)
          is not a duplicate.  */
       if (*find_answer (node, answer))
 	{
-	  cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted",
+	  cpp_error (pfile, CPP_DL_WARNING, "%qs re-asserted",
 		     NODE_NAME (node) + 1);
 	  return;
 	}
@@ -3003,10 +3010,10 @@  cpp_define (cpp_reader *pfile, const cha
 void
 cpp_define_unused (cpp_reader *pfile, const char *str)
 {
-    unsigned char warn_unused_macros = CPP_OPTION (pfile, warn_unused_macros);
-    CPP_OPTION (pfile, warn_unused_macros) = 0;
-    cpp_define (pfile, str);
-    CPP_OPTION (pfile, warn_unused_macros) = warn_unused_macros;
+  unsigned char warn_unused_macros = CPP_OPTION (pfile, warn_unused_macros);
+  CPP_OPTION (pfile, warn_unused_macros) = 0;
+  cpp_define (pfile, str);
+  CPP_OPTION (pfile, warn_unused_macros) = warn_unused_macros;
 }
 
 /* Use to build macros to be run through cpp_define() as
--- libcpp/expr.cc.jj	2024-09-12 23:12:54.043423944 +0200
+++ libcpp/expr.cc	2024-09-13 09:52:31.719800975 +0200
@@ -678,10 +678,12 @@  cpp_classify_number (cpp_reader *pfile,
     {
       if (radix == 2)
 	SYNTAX_ERROR2_AT (virtual_location,
-			  "invalid digit \"%c\" in binary constant", '0' + max_digit);
+			  "invalid digit %<%c%> in binary constant",
+			  '0' + max_digit);
       else
 	SYNTAX_ERROR2_AT (virtual_location,
-			  "invalid digit \"%c\" in octal constant", '0' + max_digit);
+			  "invalid digit %<%c%> in octal constant",
+			  '0' + max_digit);
     }
 
   if (float_flag != NOT_FLOAT)
@@ -689,7 +691,7 @@  cpp_classify_number (cpp_reader *pfile,
       if (radix == 2)
 	{
 	  cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
-			       "invalid prefix \"0b\" for floating constant");
+			       "invalid prefix %<0b%> for floating constant");
 	  return CPP_N_INVALID;
 	}
 
@@ -751,8 +753,8 @@  cpp_classify_number (cpp_reader *pfile,
 	  else
 	    {
 	      cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
-				   "invalid suffix \"%.*s\" on floating constant",
-				   (int) (limit - str), str);
+				   "invalid suffix %<%.*s%> on floating "
+				   "constant", (int) (limit - str), str);
 	      return CPP_N_INVALID;
 	    }
 	}
@@ -762,7 +764,7 @@  cpp_classify_number (cpp_reader *pfile,
 	  && CPP_WTRADITIONAL (pfile)
 	  && ! cpp_sys_macro_p (pfile))
 	cpp_warning_with_line (pfile, CPP_W_TRADITIONAL, virtual_location, 0,
-			       "traditional C rejects the \"%.*s\" suffix",
+			       "traditional C rejects the %<%.*s%> suffix",
 			       (int) (limit - str), str);
 
       /* A suffix for double is a GCC extension via decimal float support.
@@ -777,8 +779,8 @@  cpp_classify_number (cpp_reader *pfile,
       if ((result & CPP_N_DFLOAT) && radix != 10)
         {
           cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
-			       "invalid suffix \"%.*s\" with hexadecimal floating constant",
-			       (int) (limit - str), str);
+			       "invalid suffix %<%.*s%> with hexadecimal "
+			       "floating constant", (int) (limit - str), str);
           return CPP_N_INVALID;
         }
 
@@ -791,11 +793,12 @@  cpp_classify_number (cpp_reader *pfile,
 	  if (!CPP_OPTION (pfile, dfp_constants))
 	    cpp_pedwarning_with_line
 	      (pfile, CPP_W_PEDANTIC, virtual_location, 0,
-	       "decimal float constants are a C23 feature");
+	       "decimal floating constants are a C23 feature");
 	  else if (CPP_OPTION (pfile, cpp_warn_c11_c23_compat) > 0)
 	    cpp_warning_with_line (pfile, CPP_W_C11_C23_COMPAT,
 				   virtual_location, 0,
-				   "decimal float constants are a C23 feature");
+				   "decimal floating constants are a C23 "
+				   "feature");
 	}
 
       result |= CPP_N_FLOATING;
@@ -814,8 +817,8 @@  cpp_classify_number (cpp_reader *pfile,
 	  else
 	    {
 	      cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
-				   "invalid suffix \"%.*s\" on integer constant",
-				   (int) (limit - str), str);
+				   "invalid suffix %<%.*s%> on integer "
+				   "constant", (int) (limit - str), str);
 	      return CPP_N_INVALID;
 	    }
 	}
@@ -831,7 +834,7 @@  cpp_classify_number (cpp_reader *pfile,
 	  if (u_or_i || large)
 	    cpp_warning_with_line (pfile, large ? CPP_W_LONG_LONG : CPP_W_TRADITIONAL,
 				   virtual_location, 0,
-				   "traditional C rejects the \"%.*s\" suffix",
+				   "traditional C rejects the %<%.*s%> suffix",
 				   (int) (limit - str), str);
 	}
 
@@ -853,9 +856,10 @@  cpp_classify_number (cpp_reader *pfile,
       if ((result & CPP_N_SIZE_T) == CPP_N_SIZE_T
 	  && !CPP_OPTION (pfile, size_t_literals))
        {
-	  const char *message = (result & CPP_N_UNSIGNED) == CPP_N_UNSIGNED
-				? N_("use of C++23 %<size_t%> integer constant")
-				: N_("use of C++23 %<make_signed_t<size_t>%> integer constant");
+	  const char *message
+	    = (result & CPP_N_UNSIGNED) == CPP_N_UNSIGNED
+	      ? N_("use of C++23 %<size_t%> integer constant")
+	      : N_("use of C++23 %<make_signed_t<size_t>%> integer constant");
 	  cpp_warning_with_line (pfile, CPP_W_SIZE_T_LITERALS,
 				 virtual_location, 0, message);
        }
@@ -1118,7 +1122,7 @@  parse_defined (cpp_reader *pfile)
   cpp_context *initial_context = pfile->context;
 
   if (pfile->state.in_directive == 3)
-    cpp_error (pfile, CPP_DL_ERROR, "'defined' in #embed parameter");
+    cpp_error (pfile, CPP_DL_ERROR, "%<defined%> in %<#embed%> parameter");
 
   /* Don't expand macros.  */
   pfile->state.prevent_expansion++;
@@ -1135,14 +1139,14 @@  parse_defined (cpp_reader *pfile)
       node = token->val.node.node;
       if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
 	{
-	  cpp_error (pfile, CPP_DL_ERROR, "missing ')' after \"defined\"");
+	  cpp_error (pfile, CPP_DL_ERROR, "missing %<)%> after %<defined%>");
 	  node = 0;
 	}
     }
   else
     {
       cpp_error (pfile, CPP_DL_ERROR,
-		 "operator \"defined\" requires an identifier");
+		 "operator %<defined%> requires an identifier");
       if (token->flags & NAMED_OP)
 	{
 	  cpp_token op;
@@ -1150,7 +1154,7 @@  parse_defined (cpp_reader *pfile)
 	  op.flags = 0;
 	  op.type = token->type;
 	  cpp_error (pfile, CPP_DL_ERROR,
-		     "(\"%s\" is an alternative token for \"%s\" in C++)",
+		     "(%qs is an alternative token for %qs in C++)",
 		     cpp_token_as_text (pfile, token),
 		     cpp_token_as_text (pfile, &op));
 	}
@@ -1163,7 +1167,7 @@  parse_defined (cpp_reader *pfile)
 	   || initial_context != &pfile->base_context)
 	  && CPP_OPTION (pfile, warn_expansion_to_defined))
         cpp_pedwarning (pfile, CPP_W_EXPANSION_TO_DEFINED,
-		        "this use of \"defined\" may not be portable");
+		        "this use of %<defined%> may not be portable");
       is_defined = _cpp_defined_macro_p (node);
       if (!_cpp_maybe_notify_macro_use (pfile, node, token->src_loc))
 	/* It wasn't a macro after all.  */
@@ -1268,7 +1272,7 @@  eval_token (cpp_reader *pfile, const cpp
 	  result.low = 0;
 	  if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval)
 	    cpp_warning_with_line (pfile, CPP_W_UNDEF, virtual_location, 0,
-				   "\"%s\" is not defined, evaluates to 0",
+				   "%qs is not defined, evaluates to %<0%>",
 				   NODE_NAME (token->val.node.node));
 	}
       break;
@@ -1431,7 +1435,7 @@  _cpp_parse_expr (cpp_reader *pfile, cons
 	case CPP_HASH:
 	  if (!want_value)
 	    SYNTAX_ERROR2_AT (op.loc,
-			      "missing binary operator before token \"%s\"",
+			      "missing binary operator before token %qs",
 			      cpp_token_as_text (pfile, op.token));
 	  want_value = false;
 	  top->value = eval_token (pfile, op.token, op.loc);
@@ -1456,7 +1460,8 @@  _cpp_parse_expr (cpp_reader *pfile, cons
 	default:
 	  if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
 	    SYNTAX_ERROR2_AT (op.loc,
-			      "token \"%s\" is not valid in preprocessor expressions",
+			      "token %qs is not valid in preprocessor "
+			      "expressions",
 			      cpp_token_as_text (pfile, op.token));
 	  break;
 	}
@@ -1466,7 +1471,7 @@  _cpp_parse_expr (cpp_reader *pfile, cons
 	{
 	  if (!want_value)
 	    SYNTAX_ERROR2_AT (op.loc,
-			      "missing binary operator before token \"%s\"",
+			      "missing binary operator before token %qs",
 			      cpp_token_as_text (pfile, op.token));
 	}
       else if (want_value)
@@ -1475,7 +1480,7 @@  _cpp_parse_expr (cpp_reader *pfile, cons
 	     Try to emit a specific diagnostic.  */
 	  if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN)
 	    SYNTAX_ERROR_AT (op.loc,
-			     "missing expression between '(' and ')'");
+			     "missing expression between %<(%> and %<)%>");
 
 	  if (op.op == CPP_EOF && top->op == CPP_EOF)
  	    SYNTAX_ERROR2_AT (op.loc,
@@ -1483,13 +1488,13 @@  _cpp_parse_expr (cpp_reader *pfile, cons
 
  	  if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
  	    SYNTAX_ERROR2_AT (op.loc,
-			      "operator '%s' has no right operand",
+			      "operator %qs has no right operand",
 			      cpp_token_as_text (pfile, top->token));
 	  else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF)
 	    /* Complain about missing paren during reduction.  */;
 	  else
 	    SYNTAX_ERROR2_AT (op.loc,
-			      "operator '%s' has no left operand",
+			      "operator %qs has no left operand",
 			      cpp_token_as_text (pfile, op.token));
 	}
 
@@ -1518,7 +1523,7 @@  _cpp_parse_expr (cpp_reader *pfile, cons
 	case CPP_COLON:
 	  if (top->op != CPP_QUERY)
 	    SYNTAX_ERROR_AT (op.loc,
-			     " ':' without preceding '?'");
+			     " %<:%> without preceding %<?%>");
 	  if (!num_zerop (top[-1].value)) /* Was '?' condition true?  */
 	    pfile->state.skip_eval++;
 	  else
@@ -1687,7 +1692,7 @@  reduce (cpp_reader *pfile, struct op *to
 	    {
 	      cpp_error_with_line (pfile, CPP_DL_ERROR, 
 				   top->token->src_loc,
-				   0, "missing ')' in expression");
+				   0, "missing %<)%> in expression");
 	      return 0;
 	    }
 	  top--;
@@ -1716,7 +1721,7 @@  reduce (cpp_reader *pfile, struct op *to
 	  /* COMMA and COLON should not reduce a QUERY operator.  */
 	  if (op == CPP_COMMA || op == CPP_COLON)
 	    return top;
-	  cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'");
+	  cpp_error (pfile, CPP_DL_ERROR, "%<?%> without following %<:%>");
 	  return 0;
 
 	default:
@@ -1731,7 +1736,7 @@  reduce (cpp_reader *pfile, struct op *to
 
   if (op == CPP_CLOSE_PAREN)
     {
-      cpp_error (pfile, CPP_DL_ERROR, "missing '(' in expression");
+      cpp_error (pfile, CPP_DL_ERROR, "missing %<(%> in expression");
       return 0;
     }
 
@@ -1763,12 +1768,12 @@  check_promotion (cpp_reader *pfile, cons
     {
       if (!num_positive (op[-1].value, CPP_OPTION (pfile, precision)))
 	cpp_error_with_line (pfile, CPP_DL_WARNING, op[-1].loc, 0,
-			     "the left operand of \"%s\" changes sign when promoted",
-			     cpp_token_as_text (pfile, op->token));
+			     "the left operand of %qs changes sign when "
+			     "promoted", cpp_token_as_text (pfile, op->token));
     }
   else if (!num_positive (op->value, CPP_OPTION (pfile, precision)))
     cpp_error_with_line (pfile, CPP_DL_WARNING, op->loc, 0,
-	       "the right operand of \"%s\" changes sign when promoted",
+	       "the right operand of %qs changes sign when promoted",
 	       cpp_token_as_text (pfile, op->token));
 }
 
--- libcpp/files.cc.jj	2024-09-12 23:13:27.708941247 +0200
+++ libcpp/files.cc	2024-09-12 23:13:32.245876199 +0200
@@ -530,7 +530,7 @@  _cpp_find_file (cpp_reader *pfile, const
 
   /* Ensure we get no confusion between cached files and directories.  */
   if (start_dir == NULL)
-    cpp_error_at (pfile, CPP_DL_ICE, loc, "NULL directory in find_file");
+    cpp_error_at (pfile, CPP_DL_ICE, loc, "NULL directory in %<find_file%>");
 
   void **hash_slot
     = htab_find_slot_with_hash (pfile->file_hash, fname,
@@ -607,7 +607,7 @@  _cpp_find_file (cpp_reader *pfile, const
 			   " but they were invalid");
 		if (!cpp_get_options (pfile)->warn_invalid_pch)
 		  cpp_error (pfile, CPP_DL_NOTE,
-			     "use -Winvalid-pch for more information");
+			     "use %<-Winvalid-pch%> for more information");
 	      }
 
 	    if (kind == _cpp_FFK_PRE_INCLUDE)
@@ -1415,7 +1415,8 @@  finish_base64_embed (cpp_reader *pfile,
     {
       if (!params->has_embed)
 	cpp_error_at (pfile, CPP_DL_ERROR, params->loc,
-		      "'gnu::base64' parameter can be only used with \".\"");
+		      "%<gnu::base64%> parameter can be only used with "
+		      "%<\".\"%>");
       return 0;
     }
   tokenrun *cur_run = &params->base64.base_run;
@@ -1431,7 +1432,7 @@  finish_base64_embed (cpp_reader *pfile,
 	    {
 	    fail:
 	      cpp_error_at (pfile, CPP_DL_ERROR, params->loc,
-			    "'gnu::base64' argument not valid base64 "
+			    "%<gnu::base64%> argument not valid base64 "
 			    "encoded string");
 	      free (buf);
 	      return 0;
--- libcpp/init.cc.jj	2024-09-12 23:12:54.044423930 +0200
+++ libcpp/init.cc	2024-09-12 23:13:32.243876228 +0200
@@ -653,7 +653,7 @@  static void sanity_checks (cpp_reader *p
      type precisions made by cpplib.  */
   test--;
   if (test < 1)
-    cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
+    cpp_error (pfile, CPP_DL_ICE, "%<cppchar_t%> must be an unsigned type");
 
   if (CPP_OPTION (pfile, precision) > max_precision)
     cpp_error (pfile, CPP_DL_ICE,
@@ -664,18 +664,19 @@  static void sanity_checks (cpp_reader *p
 
   if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
     cpp_error (pfile, CPP_DL_ICE,
-	       "CPP arithmetic must be at least as precise as a target int");
+	       "CPP arithmetic must be at least as precise as a target "
+	       "%<int%>");
 
   if (CPP_OPTION (pfile, char_precision) < 8)
-    cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
+    cpp_error (pfile, CPP_DL_ICE, "target %<char%> is less than 8 bits wide");
 
   if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
     cpp_error (pfile, CPP_DL_ICE,
-	       "target wchar_t is narrower than target char");
+	       "target %<wchar_t%> is narrower than target %<char%>");
 
   if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
     cpp_error (pfile, CPP_DL_ICE,
-	       "target int is narrower than target char");
+	       "target %<int%> is narrower than target %<char%>");
 
   /* This is assumed in eval_token() and could be fixed if necessary.  */
   if (sizeof (cppchar_t) > sizeof (cpp_num_part))
--- libcpp/lex.cc.jj	2024-09-12 23:12:54.045423916 +0200
+++ libcpp/lex.cc	2024-09-12 23:13:32.243876228 +0200
@@ -1036,7 +1036,7 @@  _cpp_process_line_notes (cpp_reader *pfi
 	      if (CPP_OPTION (pfile, trigraphs))
 		cpp_warning_with_line (pfile, CPP_W_TRIGRAPHS,
                                        pfile->line_table->highest_line, col,
-				       "trigraph ??%c converted to %c",
+				       "trigraph %<??%c%> converted to %<%c%>",
 				       note->type,
 				       (int) _cpp_trigraph_map[note->type]);
 	      else
@@ -1044,7 +1044,7 @@  _cpp_process_line_notes (cpp_reader *pfi
 		  cpp_warning_with_line 
 		    (pfile, CPP_W_TRIGRAPHS,
                      pfile->line_table->highest_line, col,
-		     "trigraph ??%c ignored, use -trigraphs to enable",
+		     "trigraph %<??%c%> ignored, use %<-trigraphs%> to enable",
 		     note->type);
 		}
 	    }
@@ -1577,7 +1577,7 @@  maybe_warn_bidi_on_char (cpp_reader *pfi
 	      rich_loc.add_range (bidi::current_ctx_loc ());
 	      cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
 			      "UTF-8 vs UCN mismatch when closing "
-			      "a context by \"%s\"", bidi::to_str (kind));
+			      "a context by %qs", bidi::to_str (kind));
 	    }
 	}
       else if (warn_bidi & bidirectional_any
@@ -1585,11 +1585,11 @@  maybe_warn_bidi_on_char (cpp_reader *pfi
 	{
 	  if (kind == bidi::kind::PDF || kind == bidi::kind::PDI)
 	    cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
-			    "\"%s\" is closing an unopened context",
+			    "%qs is closing an unopened context",
 			    bidi::to_str (kind));
 	  else
 	    cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
-			    "found problematic Unicode character \"%s\"",
+			    "found problematic Unicode character %qs",
 			    bidi::to_str (kind));
 	}
     }
@@ -1619,13 +1619,13 @@  _cpp_warn_invalid_utf8 (cpp_reader *pfil
 	cpp_error_with_line (pfile, CPP_DL_PEDWARN,
 			     pfile->line_table->highest_line,
 			     CPP_BUF_COL (buffer),
-			     "invalid UTF-8 character <%x>",
+			     "invalid UTF-8 character %<<%x>%>",
 			     cur[0]);
       else
 	cpp_warning_with_line (pfile, CPP_W_INVALID_UTF8,
 			       pfile->line_table->highest_line,
 			       CPP_BUF_COL (buffer),
-			       "invalid UTF-8 character <%x>",
+			       "invalid UTF-8 character %<<%x>%>",
 			       cur[0]);
       return cur + 1;
     }
@@ -1635,13 +1635,13 @@  _cpp_warn_invalid_utf8 (cpp_reader *pfil
 	cpp_error_with_line (pfile, CPP_DL_PEDWARN,
 			     pfile->line_table->highest_line,
 			     CPP_BUF_COL (buffer),
-			     "invalid UTF-8 character <%x><%x>",
+			     "invalid UTF-8 character %<<%x><%x>%>",
 			     cur[0], cur[1]);
       else
 	cpp_warning_with_line (pfile, CPP_W_INVALID_UTF8,
 			       pfile->line_table->highest_line,
 			       CPP_BUF_COL (buffer),
-			       "invalid UTF-8 character <%x><%x>",
+			       "invalid UTF-8 character %<<%x><%x>%>",
 			       cur[0], cur[1]);
       return cur + 2;
     }
@@ -1651,13 +1651,13 @@  _cpp_warn_invalid_utf8 (cpp_reader *pfil
 	cpp_error_with_line (pfile, CPP_DL_PEDWARN,
 			     pfile->line_table->highest_line,
 			     CPP_BUF_COL (buffer),
-			     "invalid UTF-8 character <%x><%x><%x>",
+			     "invalid UTF-8 character %<<%x><%x><%x>%>",
 			     cur[0], cur[1], cur[2]);
       else
 	cpp_warning_with_line (pfile, CPP_W_INVALID_UTF8,
 			       pfile->line_table->highest_line,
 			       CPP_BUF_COL (buffer),
-			       "invalid UTF-8 character <%x><%x><%x>",
+			       "invalid UTF-8 character %<<%x><%x><%x>%>",
 			       cur[0], cur[1], cur[2]);
       return cur + 3;
     }
@@ -1667,13 +1667,13 @@  _cpp_warn_invalid_utf8 (cpp_reader *pfil
 	cpp_error_with_line (pfile, CPP_DL_PEDWARN,
 			     pfile->line_table->highest_line,
 			     CPP_BUF_COL (buffer),
-			     "invalid UTF-8 character <%x><%x><%x><%x>",
+			     "invalid UTF-8 character %<<%x><%x><%x><%x>%>",
 			     cur[0], cur[1], cur[2], cur[3]);
       else
 	cpp_warning_with_line (pfile, CPP_W_INVALID_UTF8,
 			       pfile->line_table->highest_line,
 			       CPP_BUF_COL (buffer),
-			       "invalid UTF-8 character <%x><%x><%x><%x>",
+			       "invalid UTF-8 character %<<%x><%x><%x><%x>%>",
 			       cur[0], cur[1], cur[2], cur[3]);
       return cur + 4;
     }
@@ -1755,7 +1755,7 @@  _cpp_skip_block_comment (cpp_reader *pfi
 	      cpp_warning_with_line (pfile, CPP_W_COMMENTS,
 				     pfile->line_table->highest_line,
 				     CPP_BUF_COL (buffer),
-				     "\"/*\" within comment");
+				     "%</*%> within comment");
 	    }
 	}
       else if (c == '\n')
@@ -1933,13 +1933,13 @@  warn_about_normalization (cpp_reader *pf
       sz = cpp_spell_token (pfile, token, buf, false) - buf;
       if (NORMALIZE_STATE_RESULT (s) == normalized_C)
 	cpp_warning_at (pfile, CPP_W_NORMALIZE, &rich_loc,
-			"`%.*s' is not in NFKC", (int) sz, buf);
+			"%<%.*s%> is not in NFKC", (int) sz, buf);
       else if (identifier && CPP_OPTION (pfile, xid_identifiers))
 	cpp_pedwarning_at (pfile, CPP_W_NORMALIZE, &rich_loc,
-				  "`%.*s' is not in NFC", (int) sz, buf);
+				  "%<%.*s%> is not in NFC", (int) sz, buf);
       else
 	cpp_warning_at (pfile, CPP_W_NORMALIZE, &rich_loc,
-			"`%.*s' is not in NFC", (int) sz, buf);
+			"%<%.*s%> is not in NFC", (int) sz, buf);
       free (buf);
     }
 }
@@ -1966,7 +1966,7 @@  forms_identifier_p (cpp_reader *pfile, i
       if (CPP_OPTION (pfile, warn_dollars) && !pfile->state.skipping)
 	{
 	  CPP_OPTION (pfile, warn_dollars) = 0;
-	  cpp_error (pfile, CPP_DL_PEDWARN, "'$' in identifier or number");
+	  cpp_error (pfile, CPP_DL_PEDWARN, "%<$%> in identifier or number");
 	}
 
       return true;
@@ -2028,10 +2028,10 @@  maybe_va_opt_error (cpp_reader *pfile)
 	{
 	  if (CPP_OPTION (pfile, cplusplus))
 	    cpp_pedwarning (pfile, CPP_W_CXX20_EXTENSIONS,
-			    "__VA_OPT__ is not available until C++20");
+			    "%<__VA_OPT__%> is not available until C++20");
 	  else
 	    cpp_pedwarning (pfile, CPP_W_PEDANTIC,
-			    "__VA_OPT__ is not available until C23");
+			    "%<__VA_OPT__%> is not available until C23");
 	}
     }
   else if (!pfile->state.va_args_ok)
@@ -2039,7 +2039,7 @@  maybe_va_opt_error (cpp_reader *pfile)
       /* __VA_OPT__ should only appear in the replacement list of a
 	 variadic macro.  */
       cpp_error (pfile, CPP_DL_PEDWARN,
-		 "__VA_OPT__ can only appear in the expansion"
+		 "%<__VA_OPT__%> can only appear in the expansion"
 		 " of a C++20 variadic macro");
     }
 }
@@ -2056,7 +2056,7 @@  identifier_diagnostics_on_lex (cpp_reade
   /* It is allowed to poison the same identifier twice.  */
   if ((node->flags & NODE_POISONED) && !pfile->state.poisoned_ok)
     {
-      cpp_error (pfile, CPP_DL_ERROR, "attempt to use poisoned \"%s\"",
+      cpp_error (pfile, CPP_DL_ERROR, "attempt to use poisoned %qs",
 		 NODE_NAME (node));
       const auto data = (cpp_hashnode_extra *)
 	ht_lookup (pfile->extra_hash_table, node->ident, HT_NO_INSERT);
@@ -2071,11 +2071,11 @@  identifier_diagnostics_on_lex (cpp_reade
     {
       if (CPP_OPTION (pfile, cplusplus))
 	cpp_error (pfile, CPP_DL_PEDWARN,
-		   "__VA_ARGS__ can only appear in the expansion"
+		   "%<__VA_ARGS__%> can only appear in the expansion"
 		   " of a C++11 variadic macro");
       else
 	cpp_error (pfile, CPP_DL_PEDWARN,
-		   "__VA_ARGS__ can only appear in the expansion"
+		   "%<__VA_ARGS__%> can only appear in the expansion"
 		   " of a C99 variadic macro");
     }
 
@@ -2087,7 +2087,7 @@  identifier_diagnostics_on_lex (cpp_reade
   /* For -Wc++-compat, warn about use of C++ named operators.  */
   if (node->flags & NODE_WARN_OPERATOR)
     cpp_warning (pfile, CPP_W_CXX_OPERATOR_NAMES,
-		 "identifier \"%s\" is a special operator name in C++",
+		 "identifier %qs is a special operator name in C++",
 		 NODE_NAME (node));
 }
 
@@ -3485,7 +3485,7 @@  cpp_maybe_module_directive (cpp_reader *
 	      && _cpp_maybe_notify_macro_use (pfile, node, tok->src_loc)
 	      && !cpp_fun_like_macro_p (node))
 	    cpp_error_with_line (pfile, CPP_DL_ERROR, tok->src_loc, 0, 
-				 "module control-line \"%s\" cannot be"
+				 "module control-line %qs cannot be"
 				 " an object-like macro",
 				 NODE_NAME (node));
 	}
--- libcpp/macro.cc.jj	2024-09-12 23:12:54.046423901 +0200
+++ libcpp/macro.cc	2024-09-12 23:13:32.246876185 +0200
@@ -141,7 +141,7 @@  class vaopt_state {
 	if (m_state > 0)
 	  {
 	    cpp_error_at (m_pfile, CPP_DL_ERROR, token->src_loc,
-			  "__VA_OPT__ may not appear in a __VA_OPT__");
+			  "%<__VA_OPT__%> may not appear in a %<__VA_OPT__%>");
 	    return ERROR;
 	  }
 	++m_state;
@@ -154,7 +154,7 @@  class vaopt_state {
 	if (token->type != CPP_OPEN_PAREN)
 	  {
 	    cpp_error_at (m_pfile, CPP_DL_ERROR, m_location,
-			  "__VA_OPT__ must be followed by an "
+			  "%<__VA_OPT__%> must be followed by an "
 			  "open parenthesis");
 	    return ERROR;
 	  }
@@ -232,7 +232,7 @@  class vaopt_state {
   {
     if (m_variadic && m_state != 0)
       cpp_error_at (m_pfile, CPP_DL_ERROR, m_location,
-		    "unterminated __VA_OPT__");
+		    "unterminated %<__VA_OPT__%>");
     return m_state == 0;
   }
 
@@ -393,7 +393,7 @@  builtin_has_include_1 (cpp_reader *pfile
 {
   if (!pfile->state.in_directive)
     cpp_error (pfile, CPP_DL_ERROR,
-	       "\"%s\" used outside of preprocessing directive", name);
+	       "%qs used outside of preprocessing directive", name);
 
   pfile->state.angled_headers = true;
   const auto sav_padding = pfile->state.directive_wants_padding;
@@ -404,7 +404,7 @@  builtin_has_include_1 (cpp_reader *pfile
     token = _cpp_get_token_no_padding (pfile);
   else
     cpp_error (pfile, CPP_DL_ERROR,
-	       "missing '(' before \"%s\" operand", name);
+	       "missing %<(%> before %qs operand", name);
   pfile->state.angled_headers = false;
   pfile->state.directive_wants_padding = sav_padding;
 
@@ -422,7 +422,7 @@  builtin_has_include_1 (cpp_reader *pfile
     fname = _cpp_bracket_include (pfile);
   else
     cpp_error (pfile, CPP_DL_ERROR,
-	       "operator \"%s\" requires a header-name", name);
+	       "operator %qs requires a header-name", name);
   return fname;
 }
 
@@ -451,7 +451,7 @@  builtin_has_include (cpp_reader *pfile,
   if (paren
       && _cpp_get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
     cpp_error (pfile, CPP_DL_ERROR,
-	       "missing ')' after \"%s\" operand", NODE_NAME (op));
+	       "missing %<)%> after %qs operand", NODE_NAME (op));
 
   return result;
 }
@@ -496,7 +496,7 @@  builtin_has_embed (cpp_reader *pfile)
       if (!*fname)
 	{
 	  cpp_error_with_line (pfile, CPP_DL_ERROR, params.loc, 0,
-			       "empty filename in '%s'", "__has_embed");
+			       "empty filename in %qs", "__has_embed");
 	  ok = false;
 	}
 
@@ -530,7 +530,7 @@  _cpp_warn_if_unused_macro (cpp_reader *p
 			    (linemap_lookup (pfile->line_table,
 					     macro->line))))
 	cpp_warning_with_line (pfile, CPP_W_UNUSED_MACROS, macro->line, 0,
-			       "macro \"%s\" is not used", NODE_NAME (node));
+			       "macro %qs is not used", NODE_NAME (node));
     }
 
   return 1;
@@ -569,14 +569,14 @@  _cpp_builtin_macro_text (cpp_reader *pfi
   switch (node->value.builtin)
     {
     default:
-      cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
+      cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro %qs",
 		 NODE_NAME (node));
       break;
 
     case BT_TIMESTAMP:
       {
 	if (CPP_OPTION (pfile, warn_date_time))
-	  cpp_warning (pfile, CPP_W_DATE_TIME, "macro \"%s\" might prevent "
+	  cpp_warning (pfile, CPP_W_DATE_TIME, "macro %qs might prevent "
 		       "reproducible builds", NODE_NAME (node));
 
 	cpp_buffer *pbuffer = cpp_get_buffer (pfile);
@@ -684,7 +684,7 @@  _cpp_builtin_macro_text (cpp_reader *pfi
     case BT_DATE:
     case BT_TIME:
       if (CPP_OPTION (pfile, warn_date_time))
-	cpp_warning (pfile, CPP_W_DATE_TIME, "macro \"%s\" might prevent "
+	cpp_warning (pfile, CPP_W_DATE_TIME, "macro %qs might prevent "
 		     "reproducible builds", NODE_NAME (node));
       if (pfile->date == NULL)
 	{
@@ -730,7 +730,8 @@  _cpp_builtin_macro_text (cpp_reader *pfi
     case BT_COUNTER:
       if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
 	cpp_error (pfile, CPP_DL_ERROR,
-	    "__COUNTER__ expanded inside directive with -fdirectives-only");
+		   "%<__COUNTER__%> expanded inside directive with "
+		   "%<-fdirectives-only%>");
       number = pfile->counter++;
       break;
 
@@ -756,7 +757,7 @@  _cpp_builtin_macro_text (cpp_reader *pfi
       if (CPP_OPTION (pfile, traditional))
 	{
 	  cpp_error (pfile, CPP_DL_ERROR, /* FIXME should be DL_SORRY */
-		     "'__has_embed' not supported in traditional C");
+		     "%<__has_embed%> not supported in traditional C");
 	  break;
 	}
       number = builtin_has_embed (pfile);
@@ -884,7 +885,7 @@  builtin_macro (cpp_reader *pfile, cpp_ha
   else
     _cpp_push_token_context (pfile, NULL, token, 1);
   if (pfile->buffer->cur != pfile->buffer->rlimit)
-    cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
+    cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro %qs",
 	       NODE_NAME (node));
   _cpp_pop_buffer (pfile);
 
@@ -1003,7 +1004,7 @@  stringify_arg (cpp_reader *pfile, const
   if (backslash_count & 1)
     {
       cpp_error (pfile, CPP_DL_WARNING,
-		 "invalid string literal, ignoring final '\\'");
+		 "invalid string literal, ignoring final %<\\%>");
       dest--;
     }
 
@@ -1200,26 +1201,26 @@  _cpp_arguments_ok (cpp_reader *pfile, cp
 	      if (CPP_OPTION (pfile, cplusplus))
 		cpp_pedwarning (pfile, CPP_W_CXX20_EXTENSIONS,
 				"ISO C++11 requires at least one argument "
-				"for the \"...\" in a variadic macro");
+				"for the %<...%> in a variadic macro");
 	      else
 		cpp_pedwarning (pfile, CPP_W_PEDANTIC,
 				"ISO C99 requires at least one argument "
-				"for the \"...\" in a variadic macro");
+				"for the %<...%> in a variadic macro");
 	    }
 	  return true;
 	}
 
       cpp_error (pfile, CPP_DL_ERROR,
-		 "macro \"%s\" requires %u arguments, but only %u given",
+		 "macro %qs requires %u arguments, but only %u given",
 		 NODE_NAME (node), macro->paramc, argc);
     }
   else
     cpp_error (pfile, CPP_DL_ERROR,
-	       "macro \"%s\" passed %u arguments, but takes just %u",
+	       "macro %qs passed %u arguments, but takes just %u",
 	       NODE_NAME (node), argc, macro->paramc);
 
   if (macro->line > RESERVED_LOCATION_COUNT)
-    cpp_error_at (pfile, CPP_DL_NOTE, macro->line, "macro \"%s\" defined here",
+    cpp_error_at (pfile, CPP_DL_NOTE, macro->line, "macro %qs defined here",
 		  NODE_NAME (node));
 
   return false;
@@ -1413,7 +1414,7 @@  collect_args (cpp_reader *pfile, const c
       if (token == &pfile->endarg)
 	_cpp_backup_tokens (pfile, 1);
       cpp_error (pfile, CPP_DL_ERROR,
-		 "unterminated argument list invoking macro \"%s\"",
+		 "unterminated argument list invoking macro %qs",
 		 NODE_NAME (node));
     }
   else
@@ -1559,8 +1560,8 @@  enter_macro_context (cpp_reader *pfile,
 	    {
 	      if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
 		cpp_warning (pfile, CPP_W_TRADITIONAL,
- "function-like macro \"%s\" must be used with arguments in traditional C",
-			     NODE_NAME (node));
+			     "function-like macro %qs must be used with "
+			     "arguments in traditional C", NODE_NAME (node));
 
 	      if (pragma_buff)
 		_cpp_release_buff (pfile, pragma_buff);
@@ -3462,7 +3463,7 @@  _cpp_save_parameter (cpp_reader *pfile,
   /* Constraint 6.10.3.6 - duplicate parameter names.  */
   if (node->type == NT_MACRO_ARG)
     {
-      cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
+      cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter %qs",
 		 NODE_NAME (node));
       return false;
     }
@@ -3544,11 +3545,11 @@  parse_params (cpp_reader *pfile, unsigne
 	  {
 	    const char *const msgs[5] =
 	      {
-	       N_("expected parameter name, found \"%s\""),
-	       N_("expected ',' or ')', found \"%s\""),
+	       N_("expected parameter name, found %qs"),
+	       N_("expected %<,%> or %<)%>, found %qs"),
 	       N_("expected parameter name before end of line"),
-	       N_("expected ')' before end of line"),
-	       N_("expected ')' after \"...\"")
+	       N_("expected %<)%> before end of line"),
+	       N_("expected %<)%> after %<...%>")
 	      };
 	    unsigned ix = prev_ident;
 	    const unsigned char *as_text = NULL;
@@ -3663,7 +3664,7 @@  create_iso_definition (cpp_reader *pfile
 {
   bool following_paste_op = false;
   const char *paste_op_error_msg =
-    N_("'##' cannot appear at either end of a macro expansion");
+    N_("%<##%> cannot appear at either end of a macro expansion");
   unsigned int num_extra_tokens = 0;
   unsigned nparms = 0;
   cpp_hashnode **params = NULL;
@@ -3779,7 +3780,7 @@  create_iso_definition (cpp_reader *pfile
 	  else if (CPP_OPTION (pfile, lang) != CLK_ASM)
 	    {
 	      cpp_error (pfile, CPP_DL_ERROR,
-			 "'#' is not followed by a macro parameter");
+			 "%<#%> is not followed by a macro parameter");
 	      goto out;
 	    }
 	}
@@ -3940,15 +3941,14 @@  _cpp_create_definition (cpp_reader *pfil
 	    = (cpp_builtin_macro_p (node) && !(node->flags & NODE_WARN))
 	    ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
 
-	  bool warned = 
-	    cpp_pedwarning_with_line (pfile, reason,
-				      macro->line, 0,
-				      "\"%s\" redefined", NODE_NAME (node));
+	  bool warned
+	    =  cpp_pedwarning_with_line (pfile, reason, macro->line, 0,
+					 "%qs redefined", NODE_NAME (node));
 
 	  if (warned && cpp_user_macro_p (node))
-	    cpp_error_with_line (pfile, CPP_DL_NOTE,
-				 node->value.macro->line, 0,
-			 "this is the location of the previous definition");
+	    cpp_error_with_line (pfile, CPP_DL_NOTE, node->value.macro->line,
+				 0, "this is the location of the previous "
+				    "definition");
 	}
       _cpp_free_definition (node);
     }
@@ -4085,8 +4085,8 @@  check_trad_stringification (cpp_reader *
 	      && !memcmp (p, NODE_NAME (node), len))
 	    {
 	      cpp_warning (pfile, CPP_W_TRADITIONAL,
-	   "macro argument \"%s\" would be stringified in traditional C",
-			 NODE_NAME (node));
+			   "macro argument %qs would be stringified in "
+			   "traditional C", NODE_NAME (node));
 	      break;
 	    }
 	}
--- libcpp/pch.cc.jj	2024-02-01 20:31:40.597630432 +0100
+++ libcpp/pch.cc	2024-09-12 23:13:32.241876256 +0200
@@ -613,7 +613,7 @@  cpp_valid_state (cpp_reader *r, const ch
 	{
 	  if (CPP_OPTION (r, warn_invalid_pch))
 	    cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
-		                "%s: not used because `%.*s' is poisoned",
+		                "%s: not used because %<%.*s%> is poisoned",
 		                name, m.name_length, namebuf);
 	  goto fail;
 	}
@@ -635,7 +635,7 @@  cpp_valid_state (cpp_reader *r, const ch
 
 	  if (CPP_OPTION (r, warn_invalid_pch))
 	    cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
-		                "%s: not used because `%.*s' not defined",
+		                "%s: not used because %<%.*s%> not defined",
 		                name, m.name_length, namebuf);
 	  goto fail;
 	}
@@ -647,10 +647,12 @@  cpp_valid_state (cpp_reader *r, const ch
 	{
 	  if (CPP_OPTION (r, warn_invalid_pch))
 	    cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
-	       "%s: not used because `%.*s' defined as `%s' not `%.*s'",
-		       name, m.name_length, namebuf, newdefn + m.name_length,
-		       m.definition_length - m.name_length,
-		       namebuf +  m.name_length);
+				"%s: not used because %<%.*s%> defined as "
+				"%<%s%> not %<%.*s%>",
+				name, m.name_length, namebuf,
+				newdefn + m.name_length,
+				m.definition_length - m.name_length,
+				namebuf +  m.name_length);
 	  goto fail;
 	}
     }
@@ -688,7 +690,7 @@  cpp_valid_state (cpp_reader *r, const ch
 	{
 	  if (CPP_OPTION (r, warn_invalid_pch))
 	    cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
-		                "%s: not used because `%s' is defined",
+		                "%s: not used because %qs is defined",
 		                name, first);
 	  goto fail;
 	}
@@ -708,7 +710,7 @@  cpp_valid_state (cpp_reader *r, const ch
     {
       if (CPP_OPTION (r, warn_invalid_pch))
 	cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
-		            "%s: not used because `__COUNTER__' is invalid",
+		            "%s: not used because %<__COUNTER__%> is invalid",
 		            name);
       goto fail;
     }
--- libcpp/traditional.cc.jj	2024-01-03 22:33:38.352691603 +0100
+++ libcpp/traditional.cc	2024-09-12 23:13:32.244876213 +0200
@@ -819,7 +819,7 @@  _cpp_scan_out_logical_line (cpp_reader *
 
   if (lex_state == ls_fun_close)
     cpp_error_with_line (pfile, CPP_DL_ERROR, fmacro.line, 0,
-			 "unterminated argument list invoking macro \"%s\"",
+			 "unterminated argument list invoking macro %qs",
 			 NODE_NAME (fmacro.node));
   return result;
 }
@@ -888,7 +888,7 @@  recursive_macro (cpp_reader *pfile, cpp_
 
   if (recursing)
     cpp_error (pfile, CPP_DL_ERROR,
-	       "detected recursion whilst expanding macro \"%s\"",
+	       "detected recursion whilst expanding macro %qs",
 	       NODE_NAME (node));
 
   return recursing;
--- gcc/Makefile.in.jj	2024-09-12 18:15:16.646678098 +0200
+++ gcc/Makefile.in	2024-09-12 19:54:32.336312293 +0200
@@ -2957,12 +2957,12 @@  generated_files = config.h tm.h $(TM_P_H
        $(ALL_GTFILES_H) gtype-desc.cc gtype-desc.h version.h \
        options.h target-hooks-def.h insn-opinit.h \
        common/common-target-hooks-def.h pass-instances.def \
-       $(GIMPLE_MATCH_PD_SEQ_SRC) $(GENERIC_MATCH_PD_SEQ_SRC) \
-       gimple-match-auto.h generic-match-auto.h \
        c-family/c-target-hooks-def.h d/d-target-hooks-def.h \
        $(TM_RUST_H) rust/rust-target-hooks-def.h \
        case-cfn-macros.h \
        cfn-operators.pd omp-device-properties.h
+generated_match_files = gimple-match-auto.h generic-match-auto.h \
+	$(GIMPLE_MATCH_PD_SEQ_SRC) $(GENERIC_MATCH_PD_SEQ_SRC)
 
 #
 # How to compile object files to run on the build machine.
@@ -3146,7 +3146,8 @@  build/genmatch$(build_exeext): BUILD_LIB
 endif
 
 build/genmatch$(build_exeext) : $(BUILD_CPPLIB) \
-  $(BUILD_ERRORS) build/vec.o build/hash-table.o build/sort.o
+  build/vec.o build/hash-table.o build/sort.o libcommon.a \
+  $(LIBBACKTRACE)
 
 # These programs are not linked with the MD reader.
 build/gengtype$(build_exeext) : build/gengtype-lex.o build/gengtype-parse.o \
@@ -4575,6 +4576,8 @@  po/gcc.pot: force
 # objects from $(OBJS) as early as possible, build all their
 # prerequisites strictly before all objects.
 $(ALL_HOST_OBJS) : | $(generated_files)
+# build/genmatch depends on libcommon.a, so avoid circular dependencies.
+$(filter-out $(OBJS-libcommon),$(ALL_HOST_OBJS)) : | $(generated_match_files)
 
 # Include the auto-generated dependencies for all host objects.
 DEPFILES = \
--- gcc/genmatch.cc.jj	2024-09-12 18:15:16.685677568 +0200
+++ gcc/genmatch.cc	2024-09-12 19:14:55.970740747 +0200
@@ -31,18 +31,21 @@  along with GCC; see the file COPYING3.
 #include "hash-set.h"
 #include "is-a.h"
 #include "ordered-hash-map.h"
+#include "pretty-print.h"
+#include "input.h"
 
-
-/* Stubs for GGC referenced through instantiations triggered by hash-map.  */
-void *ggc_internal_cleared_alloc (size_t, void (*)(void *),
-				  size_t, size_t MEM_STAT_DECL)
-{
-  return NULL;
-}
-void ggc_free (void *)
+void
+fatal (const char *format, ...)
 {
-}
+  va_list ap;
 
+  va_start (ap, format);
+  fprintf (stderr, "%s: ", progname);
+  vfprintf (stderr, format, ap);
+  va_end (ap);
+  fputc ('\n', stderr);
+  exit (FATAL_EXIT_CODE);
+}
 
 /* Global state.  */
 
@@ -52,29 +55,9 @@  unsigned verbose;
 
 /* libccp helpers.  */
 
-static class line_maps *line_table;
-
-/* The rich_location class within libcpp requires a way to expand
-   location_t instances, and relies on the client code
-   providing a symbol named
-     linemap_client_expand_location_to_spelling_point
-   to do this.
-
-   This is the implementation for genmatch.  */
-
-expanded_location
-linemap_client_expand_location_to_spelling_point (const line_maps *set,
-						  location_t loc,
-						  enum location_aspect)
-{
-  const struct line_map_ordinary *map;
-  loc = linemap_resolve_location (set, loc, LRK_SPELLING_LOCATION, &map);
-  return linemap_expand_location (set, map, loc);
-}
-
 static bool
 #if GCC_VERSION >= 4001
-__attribute__((format (printf, 5, 0)))
+__attribute__((format (gcc_diag, 5, 0)))
 #endif
 diagnostic_cb (cpp_reader *, enum cpp_diagnostic_level errtype,
 	       enum cpp_warning_reason, rich_location *richloc,
@@ -86,7 +69,11 @@  diagnostic_cb (cpp_reader *, enum cpp_di
   expanded_location loc = linemap_expand_location (line_table, map, location);
   fprintf (stderr, "%s:%d:%d %s: ", loc.file, loc.line, loc.column,
 	   (errtype == CPP_DL_WARNING) ? "warning" : "error");
-  vfprintf (stderr, msg, *ap);
+  pretty_printer pp;
+  pp.set_output_stream (stderr);
+  text_info text (msg, ap, errno);
+  pp_format_verbatim (&pp, &text);
+  pp_flush (&pp);
   fprintf (stderr, "\n");
   FILE *f = fopen (loc.file, "r");
   if (f)
@@ -119,7 +106,7 @@  notfound:
 
 static void
 #if GCC_VERSION >= 4001
-__attribute__((format (printf, 2, 3)))
+__attribute__((format (gcc_diag, 2, 3)))
 #endif
 fatal_at (const cpp_token *tk, const char *msg, ...)
 {
@@ -132,7 +119,7 @@  fatal_at (const cpp_token *tk, const cha
 
 static void
 #if GCC_VERSION >= 4001
-__attribute__((format (printf, 2, 3)))
+__attribute__((format (gcc_diag, 2, 3)))
 #endif
 fatal_at (location_t loc, const char *msg, ...)
 {
@@ -145,7 +132,7 @@  fatal_at (location_t loc, const char *ms
 
 static void
 #if GCC_VERSION >= 4001
-__attribute__((format (printf, 2, 3)))
+__attribute__((format (gcc_diag, 2, 3)))
 #endif
 warning_at (const cpp_token *tk, const char *msg, ...)
 {
@@ -158,7 +145,7 @@  warning_at (const cpp_token *tk, const c
 
 static void
 #if GCC_VERSION >= 4001
-__attribute__((format (printf, 2, 3)))
+__attribute__((format (gcc_diag, 2, 3)))
 #endif
 warning_at (location_t loc, const char *msg, ...)
 {
@@ -267,8 +254,8 @@  output_line_directive (FILE *f, location
 		      bool dumpfile = false, bool fnargs = false,
 		      bool indirect_line_numbers = false)
 {
-  typedef pair_hash<nofree_string_hash, int_hash<int, -1>> location_hash;
-  static hash_map<location_hash, int> loc_id_map;
+  typedef pair_hash<nofree_string_hash, int_hash<int, -1>> loc_hash;
+  static hash_map<loc_hash, int> loc_id_map;
   const line_map_ordinary *map;
   linemap_resolve_location (line_table, location, LRK_SPELLING_LOCATION, &map);
   expanded_location loc = linemap_expand_location (line_table, map, location);
@@ -4558,7 +4545,7 @@  parser::eat_ident (const char *s)
   const cpp_token *token = peek ();
   const char *t = get_ident ();
   if (strcmp (s, t) != 0)
-    fatal_at (token, "expected '%s' got '%s'\n", s, t);
+    fatal_at (token, "expected %qs got %qs", s, t);
   return token;
 }
 
@@ -4626,7 +4613,7 @@  parser::parse_operation (unsigned char &
 	  alt_id = xstrdup (id);
 	  alt_id[strlen (id) - 1] = '\0';
 	  if (opt_grp == 1)
-	    fatal_at (id_tok, "use '%s?' here", alt_id);
+	    fatal_at (id_tok, "use %<%s?%> here", alt_id);
 	}
       else
 	opt_grp = 1;
@@ -4711,10 +4698,10 @@  parser::parse_expr ()
   if (token->type == CPP_XOR && !(token->flags & PREV_WHITE))
     {
       if (!parsing_match_operand)
-	fatal_at (token, "modifier '^' is only valid in a match expression");
+	fatal_at (token, "modifier %<^%> is only valid in a match expression");
 
       if (!(*e->operation == COND_EXPR))
-	fatal_at (token, "modifier '^' can only act on operation COND_EXPR");
+	fatal_at (token, "modifier %<^%> can only act on operation %<COND_EXPR%>");
 
       eat_token (CPP_XOR);
       e->match_phi = true;
@@ -5429,7 +5416,7 @@  parser::parse_pattern ()
     {
       if (active_ifs.length () > 0
 	  || active_fors.length () > 0)
-	fatal_at (token, "define_predicates inside if or for is not supported");
+	fatal_at (token, "%<define_predicates%> inside if or for is not supported");
       parse_predicates (token->src_loc);
     }
   else if (strcmp (id, "define_operator_list") == 0)
@@ -5439,10 +5426,11 @@  parser::parse_pattern ()
 	fatal_at (token, "operator-list inside if or for is not supported");
       parse_operator_list (token->src_loc);
     }
+  else if (active_ifs.length () == 0 && active_fors.length () == 0)
+    fatal_at (token, "expected %<define_predicates%>, %<simplify%>, "
+		     "%<match%>, %<for%> or %<if%>");
   else
-    fatal_at (token, "expected %s'simplify', 'match', 'for' or 'if'",
-	      active_ifs.length () == 0 && active_fors.length () == 0
-	      ? "'define_predicates', " : "");
+    fatal_at (token, "expected %<simplify%>, %<match%>, %<for%> or %<if%>");
 
   eat_token (CPP_CLOSE_PAREN);
 }
@@ -5484,12 +5472,13 @@  parser::finish_match_operand (operand *o
 	  if (cpts[i][j]->value_match)
 	    {
 	      if (value_match)
-		fatal_at (cpts[i][j]->location, "duplicate @@");
+		fatal_at (cpts[i][j]->location, "duplicate %s", "@@");
 	      value_match = cpts[i][j];
 	    }
 	}
       if (cpts[i].length () == 1 && value_match)
-	fatal_at (value_match->location, "@@ without a matching capture");
+	fatal_at (value_match->location,
+		  "%s without a matching capture", "@@");
       if (value_match)
 	{
 	  /* Duplicate prevailing capture with the existing ID, create
--- gcc/c-family/c-lex.cc.jj	2024-08-31 15:57:38.668024919 +0200
+++ gcc/c-family/c-lex.cc	2024-09-12 19:40:38.012724079 +0200
@@ -342,7 +342,7 @@  c_common_has_attribute (cpp_reader *pfil
   if (token->type != CPP_OPEN_PAREN)
     {
       cpp_error (pfile, CPP_DL_ERROR,
-		 "missing '(' after \"__has_attribute\"");
+		 "missing %<(%> after %<__has_attribute%>");
       return 0;
     }
   token = get_token_no_padding (pfile);
@@ -464,13 +464,13 @@  c_common_has_attribute (cpp_reader *pfil
   else
     {
       cpp_error (pfile, CPP_DL_ERROR,
-		 "macro \"__has_attribute\" requires an identifier");
+		 "macro %<__has_attribute%> requires an identifier");
       return 0;
     }
 
   if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
     cpp_error (pfile, CPP_DL_ERROR,
-	       "missing ')' after \"__has_attribute\"");
+	       "missing %<)%> after %<__has_attribute%>");
 
   return result;
 }
@@ -484,7 +484,7 @@  c_common_lex_availability_macro (cpp_rea
   if (token->type != CPP_OPEN_PAREN)
     {
       cpp_error (pfile, CPP_DL_ERROR,
-		 "missing '(' after \"__has_%s\"", builtin);
+		 "missing %<(%> after %<__has_%s%>", builtin);
       return 0;
     }
 
@@ -497,14 +497,14 @@  c_common_lex_availability_macro (cpp_rea
       if (token->type != CPP_CLOSE_PAREN)
 	{
 	  cpp_error (pfile, CPP_DL_ERROR,
-		     "expected ')' after \"%s\"", name);
+		     "expected %<)%> after %<%s%>", name);
 	  name = "";
 	}
     }
   else
     {
       cpp_error (pfile, CPP_DL_ERROR,
-		 "macro \"__has_%s\" requires an identifier", builtin);
+		 "macro %<__has_%s%> requires an identifier", builtin);
       if (token->type == CPP_CLOSE_PAREN)
 	return 0;
     }
--- gcc/testsuite/c-c++-common/cpp/counter-2.c.jj	2020-05-11 23:00:07.547503865 +0200
+++ gcc/testsuite/c-c++-common/cpp/counter-2.c	2024-09-13 09:20:12.497617451 +0200
@@ -10,5 +10,5 @@ 
 #ifdef __COUNTER__  /* Macro not expanded. */
 #endif
 
-#if __COUNTER__ == 0  /* { dg-error "__COUNTER__ expanded inside directive with -fdirectives-only" } */
+#if __COUNTER__ == 0  /* { dg-error "'__COUNTER__' expanded inside directive with '-fdirectives-only'" } */
 #endif
--- gcc/testsuite/c-c++-common/cpp/embed-3.c.jj	2024-09-12 23:12:54.031424116 +0200
+++ gcc/testsuite/c-c++-common/cpp/embed-3.c	2024-09-13 10:13:14.831620615 +0200
@@ -53,20 +53,20 @@ 
 /* { dg-error "unbalanced '\\\)'" "" { target *-*-* } .-1 } */
 /* { dg-error "unbalanced '\\\['" "" { target *-*-* } .-2 } */
 /* { dg-error "unbalanced '\\\('" "" { target *-*-* } .-3 } */
-#embed limit(1) /* { dg-error "#embed expects \\\"FILENAME\\\" or <FILENAME>" } */
+#embed limit(1) /* { dg-error "'#embed' expects '\\\"FILENAME\\\"' or '<FILENAME>'" } */
 #define FOO 1
-#embed __FILE__ limit(0 + defined(FOO)) /* { dg-error "'defined' in #embed parameter" } */
-#embed /* { dg-error "#embed expects \\\"FILENAME\\\" or <FILENAME>" } */
+#embed __FILE__ limit(0 + defined(FOO)) /* { dg-error "'defined' in '#embed' parameter" } */
+#embed /* { dg-error "'#embed' expects '\\\"FILENAME\\\"' or '<FILENAME>'" } */
 #embed "
 /* { dg-warning "missing terminating \\\" character" "" { target *-*-* } .-1 } */
- /* { dg-error "#embed expects \\\"FILENAME\\\" or <FILENAME>" "" { target *-*-* } .-2 } */
+ /* { dg-error "'#embed' expects '\\\"FILENAME\\\"' or '<FILENAME>'" "" { target *-*-* } .-2 } */
 #embed <
 /* { dg-error "empty filename in #embed" "" { target *-*-* } .-1 } */
-/* { dg-error "missing terminating > character" "" { target *-*-* } .-2 } */
-#embed >  /* { dg-error "#embed expects \\\"FILENAME\\\" or <FILENAME>" } */
+/* { dg-error "missing terminating '>' character" "" { target *-*-* } .-2 } */
+#embed >  /* { dg-error "'#embed' expects '\\\"FILENAME\\\"' or '<FILENAME>'" } */
 #embed "" /* { dg-error "empty filename in #embed" } */
 #embed <> /* { dg-error "empty filename in #embed" } */
-#embed embed-4.c  /* { dg-error "#embed expects \\\"FILENAME\\\" or <FILENAME>" } */
+#embed embed-4.c  /* { dg-error "'#embed' expects '\\\"FILENAME\\\"' or '<FILENAME>'" } */
 #embed __FILE__ foo: /* { dg-error "expected parameter name" } */
 /* { dg-error "unknown embed parameter 'foo'" "" { target *-*-* } .-1 } */
 #embed __FILE__ bar:: /* { dg-error "expected parameter name" } */
--- gcc/testsuite/c-c++-common/cpp/embed-4.c.jj	2024-09-12 23:12:54.031424116 +0200
+++ gcc/testsuite/c-c++-common/cpp/embed-4.c	2024-09-13 10:49:02.502992675 +0200
@@ -2,7 +2,7 @@ 
 /* { dg-options "" } */
 
 #if 1 + __has_embed (__FILE__ , limit(1)) /* { dg-error "expected parameter name" } */
-/* { dg-error "missing binary operator before token \\\"limit\\\"" "" { target *-*-* } .-1 } */
+/* { dg-error "missing binary operator before token 'limit'" "" { target *-*-* } .-1 } */
 #endif
 #if 1 + __has_embed (__FILE__ limit(1) /* { dg-error "expected '\\\)'" } */
 #endif
@@ -81,35 +81,35 @@ 
 /* { dg-error "expected '\\\)'" "" { target *-*-* } .-3 } */
 #endif
 #define FOO 1
-#if 1 + __has_embed (limit(1)) /* { dg-error "operator \\\"__has_embed\\\" requires a header-name" } */
-/* { dg-error "missing binary operator before token \\\"1\\\"" "" { target *-*-* } .-1 } */
+#if 1 + __has_embed (limit(1)) /* { dg-error "operator '__has_embed' requires a header-name" } */
+/* { dg-error "missing binary operator before token '1'" "" { target *-*-* } .-1 } */
 #endif
-#if 1 + __has_embed (__FILE__ limit(0 + defined(FOO))) /* { dg-error "'defined' in #embed parameter" } */
+#if 1 + __has_embed (__FILE__ limit(0 + defined(FOO))) /* { dg-error "'defined' in '#embed' parameter" } */
 #endif
-int a = __has_embed (__FILE__); /* { dg-error "\\\"__has_embed\\\" used outside of preprocessing directive" } */
-#if __has_embed /* { dg-error "missing '\\\(' before \\\"__has_embed\\\" operand" } */
-/* { dg-error "operator \\\"__has_embed\\\" requires a header-name" "" { target *-*-* } .-1 } */
+int a = __has_embed (__FILE__); /* { dg-error "'__has_embed' used outside of preprocessing directive" } */
+#if __has_embed /* { dg-error "missing '\\\(' before '__has_embed' operand" } */
+/* { dg-error "operator '__has_embed' requires a header-name" "" { target *-*-* } .-1 } */
 #endif
-#if __has_embed( /* { dg-error "operator \\\"__has_embed\\\" requires a header-name" } */
+#if __has_embed( /* { dg-error "operator '__has_embed' requires a header-name" } */
 #endif
-#if __has_embed() /* { dg-error "operator \\\"__has_embed\\\" requires a header-name" } */
+#if __has_embed() /* { dg-error "operator '__has_embed' requires a header-name" } */
 #endif
 #if __has_embed(")
 /* { dg-warning "missing terminating \\\" character" "" { target *-*-* } .-1 } */
-/* { dg-error "operator \\\"__has_embed\\\" requires a header-name" "" { target *-*-* } .-2 } */
+/* { dg-error "operator '__has_embed' requires a header-name" "" { target *-*-* } .-2 } */
 #endif
 #if __has_embed(<)
-/* { dg-error "missing terminating > character" "" { target *-*-* } .-1 } */
+/* { dg-error "missing terminating '>' character" "" { target *-*-* } .-1 } */
 /* { dg-error "expected '\\\)'" "" { target *-*-* } .-2 } */
 #endif
-#if __has_embed(>) /* { dg-error "operator \\\"__has_embed\\\" requires a header-name" } */
+#if __has_embed(>) /* { dg-error "operator '__has_embed' requires a header-name" } */
 #endif
 #if __has_embed("") /* { dg-error "empty filename in '__has_embed'" } */
 #endif
 #if __has_embed(<>) /* { dg-error "empty filename in '__has_embed'" } */
 #endif
-#if __has_embed(embed-4.c) /* { dg-error "operator \\\"__has_embed\\\" requires a header-name" } */
-/* { dg-error "missing binary operator before token \\\"4.c\\\"" "" { target *-*-* } .-1 } */
+#if __has_embed(embed-4.c) /* { dg-error "operator '__has_embed' requires a header-name" } */
+/* { dg-error "missing binary operator before token '4.c'" "" { target *-*-* } .-1 } */
 #endif
 #if __has_embed(__FILE__ foo:) /* { dg-error "expected parameter name" } */
 /* { dg-error "missing '\\\(' in expression" "" { target *-*-* } .-1 } */
@@ -120,10 +120,10 @@  int a = __has_embed (__FILE__); /* { dg-
 /* { dg-error "missing '\\\(' in expression" "" { target *-*-* } .-1 } */
 #endif
 #if __has_embed(__FILE__ foo:bar) /* { dg-error "expected parameter name" } */
-/* { dg-error "missing binary operator before token \\\"bar\\\"" "" { target *-*-* } .-1 } */
+/* { dg-error "missing binary operator before token 'bar'" "" { target *-*-* } .-1 } */
 #endif
 #if __has_embed(__FILE__ foo::bar::baz) /* { dg-error "expected parameter name" } */
-/* { dg-error "missing binary operator before token \\\"baz\\\"" "" { target *-*-* } .-1 } */
+/* { dg-error "missing binary operator before token 'baz'" "" { target *-*-* } .-1 } */
 #endif
 #if __has_embed(__FILE__ foo : : bar) /* { dg-error "expected parameter name" } */
 /* { dg-error "':' without preceding '\\\?'" "" { target *-*-* } .-1 } */
@@ -132,7 +132,7 @@  int a = __has_embed (__FILE__); /* { dg-
 /* { dg-error "missing '\\\(' in expression" "" { target *-*-* } .-1 } */
 #endif
 #if __has_embed(__FILE__ 42::foo) /* { dg-error "expected parameter name" } */
-/* { dg-error "token \\\"::\\\" is not valid in preprocessor expressions" "" { target *-*-* } .-1 } */
+/* { dg-error "token '::' is not valid in preprocessor expressions" "" { target *-*-* } .-1 } */
 #endif
 #if __has_embed(__FILE__ foo::42) /* { dg-error "expected parameter name" } */
 /* { dg-error "missing '\\\(' in expression" "" { target *-*-* } .-1 } */
--- gcc/testsuite/c-c++-common/cpp/embed-16.c.jj	2024-09-12 23:12:54.031424116 +0200
+++ gcc/testsuite/c-c++-common/cpp/embed-16.c	2024-09-13 10:10:29.141909066 +0200
@@ -6,7 +6,7 @@ 
 #embed __FILE__ gnu::offset (1 / 0) /* { dg-error "division by zero in #embed" } */
 #embed __FILE__ __gnu__::__offset__ (+ + +) /* { dg-error "operator '\\\+' has no right operand" } */
 #define FOO 1
-#embed __FILE__ gnu::offset(0 + defined(FOO)) /* { dg-error "'defined' in #embed parameter" } */
+#embed __FILE__ gnu::offset(0 + defined(FOO)) /* { dg-error "'defined' in '#embed' parameter" } */
 #embed __FILE__ gnu::offset (-1) /* { dg-error "negative embed parameter operand" } */
 #embed __FILE__ gnu::offset (-42) /* { dg-error "negative embed parameter operand" } */
 #embed __FILE__ gnu::offset (-9223372036854775807 - 1) /* { dg-error "negative embed parameter operand" } */
@@ -19,7 +19,7 @@ 
 #endif
 #if 1 + __has_embed (__FILE__ gnu::offset(+ + +)) /* { dg-error "operator '\\\+' has no right operand" } */
 #endif
-#if 1 + __has_embed (__FILE__ gnu::offset(0 + defined(FOO))) /* { dg-error "'defined' in #embed parameter" } */
+#if 1 + __has_embed (__FILE__ gnu::offset(0 + defined(FOO))) /* { dg-error "'defined' in '#embed' parameter" } */
 #endif
 #if 1 + __has_embed (__FILE__ gnu::offset (-1)) /* { dg-error "negative embed parameter operand" } */
 #endif
--- gcc/testsuite/c-c++-common/cpp/embed-18.c.jj	2024-09-12 23:12:54.031424116 +0200
+++ gcc/testsuite/c-c++-common/cpp/embed-18.c	2024-09-13 10:11:07.860374297 +0200
@@ -23,9 +23,9 @@ 
 #embed "." gnu::base64("\u{53}\u{41}\u{3d}\u{00003d}") /* { dg-error "'gnu::base64' argument not valid base64 encoded string" } */
 #embed "." gnu::base64("\U00000053\U00000041\U0000003d\U0000003d") /* { dg-error "'gnu::base64' argument not valid base64 encoded string" } */
 #embed "." gnu::base64("\N{LATIN CAPITAL LETTER S}\N{LATIN CAPITAL LETTER A}\N{LATIN CAPITAL LETTER A}\N{LATIN CAPITAL LETTER A}") /* { dg-error "'gnu::base64' argument not valid base64 encoded string" } */
-#embed "embed-18.c" gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with \\\".\\\"" } */
-#embed <embed-18.c> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with \\\".\\\"" } */
-#embed <.> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with \\\".\\\"" } */
+#embed "embed-18.c" gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
+#embed <embed-18.c> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
+#embed <.> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
 #embed "." gnu::base64("SA==") limit(3) /* { dg-error "'gnu::base64' parameter conflicts with 'limit' or 'gnu::offset' parameters" } */
 #embed "." gnu::base64("SA==") gnu::offset(1) /* { dg-error "'gnu::base64' parameter conflicts with 'limit' or 'gnu::offset' parameters" } */
 #if 1 + __has_embed ("." gnu::base64("") __gnu__::__base64__("")) /* { dg-error "duplicate embed parameter 'gnu::base64'" } */
--- gcc/testsuite/c-c++-common/cpp/eof-2.c.jj	2020-10-20 22:47:02.236213355 +0200
+++ gcc/testsuite/c-c++-common/cpp/eof-2.c	2024-09-13 09:57:17.569855397 +0200
@@ -5,4 +5,4 @@ 
 #define f(x) x
 
 #include "eof-2.h"
- /* { dg-regexp {[^\n]*eof-2.h:4:21: error: unterminated argument list invoking macro "f"\n} } */
+ /* { dg-regexp {[^\n]*eof-2.h:4:21: error: unterminated argument list invoking macro 'f'\n} } */
--- gcc/testsuite/c-c++-common/cpp/eof-3.c.jj	2020-10-20 22:47:02.236213355 +0200
+++ gcc/testsuite/c-c++-common/cpp/eof-3.c	2024-09-13 09:57:23.151778204 +0200
@@ -3,6 +3,6 @@ 
 /* { dg-do preprocess } */
 /* { dg-additional-options "-include $srcdir/c-c++-common/cpp/eof-2.h" } */
 
- /* { dg-regexp {[^\n]*eof-2.h:4:21: error: unterminated argument list invoking macro "f"\n} } */
+ /* { dg-regexp {[^\n]*eof-2.h:4:21: error: unterminated argument list invoking macro 'f'\n} } */
 
 token )
--- gcc/testsuite/c-c++-common/cpp/fmax-include-depth.c.jj	2024-07-31 21:47:22.675998687 +0200
+++ gcc/testsuite/c-c++-common/cpp/fmax-include-depth.c	2024-09-13 09:21:07.874848936 +0200
@@ -1,4 +1,4 @@ 
 /* { dg-do preprocess } */
 /* { dg-options "-fmax-include-depth=1" } */
 
-#include "fmax-include-depth-1b.h" /* { dg-error ".include nested depth 1 exceeds maximum of 1 .use -fmax-include-depth=DEPTH to increase the maximum." } */
+#include "fmax-include-depth-1b.h" /* { dg-error "'#include' nested depth 1 exceeds maximum of 1 \\\(use '-fmax-include-depth=DEPTH' to increase the maximum\\\)" } */
--- gcc/testsuite/c-c++-common/cpp/has-builtin.c.jj	2020-01-14 20:02:46.649611841 +0100
+++ gcc/testsuite/c-c++-common/cpp/has-builtin.c	2024-09-13 09:22:09.596992352 +0200
@@ -6,44 +6,44 @@ 
 #  error "__has_builtin is not defined"
 #endif
 
-#if __has_builtin             // { dg-error "missing '\\\(' after \"__has_builtin\"" }
+#if __has_builtin             // { dg-error "missing '\\\(' after '__has_builtin'" }
 #endif
 
-#if __has_builtin (           // { dg-error "macro \"__has_builtin\" requires an identifier" }
+#if __has_builtin (           // { dg-error "macro '__has_builtin' requires an identifier" }
 #endif
 
-#if __has_builtin ()          // { dg-error "macro \"__has_builtin\" requires an identifier" }
+#if __has_builtin ()          // { dg-error "macro '__has_builtin' requires an identifier" }
 #endif
 
-#if __has_builtin (1)         // { dg-error "macro \"__has_builtin\" requires an identifier" }
+#if __has_builtin (1)         // { dg-error "macro '__has_builtin' requires an identifier" }
 #endif
 
-#if __has_builtin (1, 2)      // { dg-error "macro \"__has_builtin\" requires an identifier" }
+#if __has_builtin (1, 2)      // { dg-error "macro '__has_builtin' requires an identifier" }
 #endif
 
-#if __has_builtin (1 + 2)     // { dg-error "macro \"__has_builtin\" requires an identifier" }
+#if __has_builtin (1 + 2)     // { dg-error "macro '__has_builtin' requires an identifier" }
 #endif
 
-#if __has_builtin (x, y)      // { dg-error "expected '\\\)' after \"x\"" } */
+#if __has_builtin (x, y)      // { dg-error "expected '\\\)' after 'x'" } */
 #endif
 
-#if __has_builtin (x + 1)     // { dg-error "expected '\\\)' after \"x\"" } */
+#if __has_builtin (x + 1)     // { dg-error "expected '\\\)' after 'x'" } */
 #endif
 
-#if __has_builtin (p->i)      // { dg-error "expected '\\\)' after \"p\"" } */
+#if __has_builtin (p->i)      // { dg-error "expected '\\\)' after 'p'" } */
 #endif
 
-#if __has_builtin ((x))       // { dg-error "macro \"__has_builtin\" requires an identifier" }
+#if __has_builtin ((x))       // { dg-error "macro '__has_builtin' requires an identifier" }
 #endif
 
-#if __has_builtin ((y)        // { dg-error "macro \"__has_builtin\" requires an identifier" }
+#if __has_builtin ((y)        // { dg-error "macro '__has_builtin' requires an identifier" }
 #endif
 
-#if __has_builtin ((((z)      // { dg-error "macro \"__has_builtin\" requires an identifier" }
+#if __has_builtin ((((z)      // { dg-error "macro '__has_builtin' requires an identifier" }
 #endif
 
 #if __has_builtin (x)))       // { dg-error "missing '\\\('" }"
 #endif
 
-#if __has_builtin (f ())      // { dg-error "expected '\\\)' after \"f\"" }"
+#if __has_builtin (f ())      // { dg-error "expected '\\\)' after 'f'" }"
 #endif
--- gcc/testsuite/c-c++-common/cpp/line-2.c.jj	2023-06-26 09:27:04.358366387 +0200
+++ gcc/testsuite/c-c++-common/cpp/line-2.c	2024-09-13 09:58:32.071825072 +0200
@@ -8,4 +8,4 @@  int line4;
 
 // { dg-regexp {In file included from <command-line>:\n[^\n]*/line-2.h:4:2: error: #error wrong\n} }
 
-// { dg-regexp {[^\n]*/line-2.c:3:11: error: macro "bill" passed 1 arguments, but takes just 0\n[^\n]*/line-2.h:3:9: note: macro "bill" defined here\n} }
+// { dg-regexp {[^\n]*/line-2.c:3:11: error: macro 'bill' passed 1 arguments, but takes just 0\n[^\n]*/line-2.h:3:9: note: macro 'bill' defined here\n} }
--- gcc/testsuite/c-c++-common/cpp/line-3.c.jj	2023-06-26 09:27:04.358366387 +0200
+++ gcc/testsuite/c-c++-common/cpp/line-3.c	2024-09-13 09:59:07.959328765 +0200
@@ -15,6 +15,6 @@  int line4;
 
 // { dg-regexp {In file included from <command-line>:\n[^\n]*/line-2.h:4:2: error: #error wrong\n} }
 
-// { dg-regexp {[^\n]*/line-3.c:3:11: error: macro "bill" passed 1 arguments, but takes just 0\n[^\n]*/line-2.h:3:9: note: macro "bill" defined here\n} }
+// { dg-regexp {[^\n]*/line-3.c:3:11: error: macro 'bill' passed 1 arguments, but takes just 0\n[^\n]*/line-2.h:3:9: note: macro 'bill' defined here\n} }
 
 // { dg-options "-fpreprocessed -fdirectives-only" }
--- gcc/testsuite/c-c++-common/cpp/macro-arg-count-1.c.jj	2023-06-26 09:27:04.358366387 +0200
+++ gcc/testsuite/c-c++-common/cpp/macro-arg-count-1.c	2024-09-13 09:59:59.641614027 +0200
@@ -4,7 +4,7 @@ 
 void test_1 ()
 {
   MACRO_1(42); /* { dg-line "use_of_MACRO_1" } */
-  /* { dg-error "macro \"MACRO_1\" requires 2 arguments, but only 1 given" "" { target *-*-* } use_of_MACRO_1 } */
+  /* { dg-error "macro 'MACRO_1' requires 2 arguments, but only 1 given" "" { target *-*-* } use_of_MACRO_1 } */
   /* { dg-begin-multiline-output "" }
    MACRO_1(42);
              ^
@@ -28,7 +28,7 @@  void test_1 ()
 void test_2 ()
 {
   MACRO_2(1, 2, 3); /* { dg-line "use_of_MACRO_2" } */
-  /* { dg-error "macro \"MACRO_2\" passed 3 arguments, but takes just 2" "" { target *-*-* } use_of_MACRO_2 } */
+  /* { dg-error "macro 'MACRO_2' passed 3 arguments, but takes just 2" "" { target *-*-* } use_of_MACRO_2 } */
   /* { dg-begin-multiline-output "" }
    MACRO_2(1, 2, 3);
                   ^
--- gcc/testsuite/c-c++-common/cpp/macro-arg-count-2.c.jj	2020-01-14 20:02:46.649611841 +0100
+++ gcc/testsuite/c-c++-common/cpp/macro-arg-count-2.c	2024-09-13 10:00:41.600033763 +0200
@@ -4,8 +4,8 @@ 
 void test_1 ()
 {
   MACRO_1(42); /* { dg-line "use_of_MACRO_1" } */
-  /* { dg-error "-:macro \"MACRO_1\" requires 2 arguments, but only 1 given" "" { target c } use_of_MACRO_1 } */
-  /* { dg-error "macro \"MACRO_1\" requires 2 arguments, but only 1 given" "" { target c++ } use_of_MACRO_1 } */
+  /* { dg-error "-:macro 'MACRO_1' requires 2 arguments, but only 1 given" "" { target c } use_of_MACRO_1 } */
+  /* { dg-error "macro 'MACRO_1' requires 2 arguments, but only 1 given" "" { target c++ } use_of_MACRO_1 } */
   /* { dg-message "-: macro .MACRO_1. defined here" "" { target *-*-* } def_of_MACRO_1 } */
   /* { dg-error "'MACRO_1' was not declared in this scope" "" { target c++ } use_of_MACRO_1 } */
   /* { dg-bogus "had not yet been defined" "" { target *-*-* } use_of_MACRO_1 } */
@@ -15,8 +15,8 @@  void test_1 ()
 void test_2 ()
 {
   MACRO_2(1, 2, 3); /* { dg-line "use_of_MACRO_2" } */
-  /* { dg-error "-:macro \"MACRO_2\" passed 3 arguments, but takes just 2" "" { target c } use_of_MACRO_2 } */
-  /* { dg-error "macro \"MACRO_2\" passed 3 arguments, but takes just 2" "" { target c++ } use_of_MACRO_2 } */
+  /* { dg-error "-:macro 'MACRO_2' passed 3 arguments, but takes just 2" "" { target c } use_of_MACRO_2 } */
+  /* { dg-error "macro 'MACRO_2' passed 3 arguments, but takes just 2" "" { target c++ } use_of_MACRO_2 } */
   /* { dg-message "-: macro .MACRO_2. defined here" "" { target *-*-* } def_of_MACRO_2 } */
   /* { dg-error "'MACRO_2' was not declared in this scope" "" { target c++ } use_of_MACRO_2 } */
   /* { dg-bogus "had not yet been defined" "" { target *-*-* } use_of_MACRO_2 } */
--- gcc/testsuite/c-c++-common/cpp/macro-ranges.c.jj	2023-06-26 09:27:04.358366387 +0200
+++ gcc/testsuite/c-c++-common/cpp/macro-ranges.c	2024-09-13 10:02:02.960908579 +0200
@@ -4,13 +4,13 @@ 
 /* Verify that we output range information for diagnostics involving
    macro definitions.  */
 
-#undef __TIME__ /* { dg-warning {undefining "__TIME__"} } */
+#undef __TIME__ /* { dg-warning {undefining '__TIME__'} } */
 /* { dg-begin-multiline-output "" }
  #undef __TIME__
         ^~~~~~~~
 /* { dg-end-multiline-output "" } */
 
-#define XYZ 123 /* { dg-warning {macro "XYZ" is not used} } */
+#define XYZ 123 /* { dg-warning {macro 'XYZ' is not used} } */
 /* { dg-begin-multiline-output "" }
  #define XYZ 123
          ^~~
@@ -19,7 +19,7 @@ 
 #define MACRO initial_definition /* { dg-line def_line } */
 
 /* This locus is output first for the unused warning... */
-/* { dg-warning {macro "MACRO" is not used} "" { target *-*-* } def_line } */
+/* { dg-warning {macro 'MACRO' is not used} "" { target *-*-* } def_line } */
 /* { dg-begin-multiline-output "" }
  #define MACRO initial_definition
          ^~~~~
@@ -32,20 +32,20 @@ 
          ^~~~~
 /* { dg-end-multiline-output "" } */
 
-#define MACRO /* { dg-warning {"MACRO" redefined} } */
+#define MACRO /* { dg-warning {'MACRO' redefined} } */
 /* { dg-begin-multiline-output "" }
  #define MACRO
          ^~~~~
 { dg-end-multiline-output "" } */
 
-#define MACRO2(x,y) x /* { dg-note {macro "MACRO2" defined here} } */
+#define MACRO2(x,y) x /* { dg-note {macro 'MACRO2' defined here} } */
 /* { dg-begin-multiline-output "" }
  #define MACRO2(x,y)
          ^~~~~~
 { dg-end-multiline-output "" } */
 
 MACRO2(MACRO, MACRO)
-MACRO2(MACRO) /* { dg-error {macro "MACRO2" requires 2 arguments, but only 1 given} } */
+MACRO2(MACRO) /* { dg-error {macro 'MACRO2' requires 2 arguments, but only 1 given} } */
 /* { dg-begin-multiline-output "" }
  MACRO2(MACRO)
              ^
--- gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-4.c.jj	2022-08-27 23:01:28.319565957 +0200
+++ gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-4.c	2024-09-13 09:24:42.386871955 +0200
@@ -9,52 +9,52 @@  typedef __CHAR32_TYPE__ char32_t;
 #endif
 
 const char32_t *a = U"\N{ZERO WIDTH NO BREAK SPACE}";		/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{ZERO WIDTH NO-BREAK SPACE\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{ZERO WIDTH NO-BREAK SPACE\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *b = U"\N{giraffe face}";			/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{GIRAFFE FACE\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{GIRAFFE FACE\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *c = U"\N{Giraffe Face}";			/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{GIRAFFE FACE\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{GIRAFFE FACE\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *d = U"\N{   GiRaFfE_fAcE__ ___}";		/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{GIRAFFE FACE\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{GIRAFFE FACE\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *e = U"\N{GIRAFFE}";				/* { dg-error "is not a valid universal character" } */
 const char32_t *f = U"\N{Hangul_Syllable_gAgg_}";		/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL SYLLABLE GAGG\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL SYLLABLE GAGG\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *g = U"\N{HANGUL SYLLABLE gagg}";		/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL SYLLABLE GAGG\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL SYLLABLE GAGG\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *h = U"\N{HANGULSYLLABLEGAGG}";			/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL SYLLABLE GAGG\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL SYLLABLE GAGG\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *i = U"\N{HANGUL_SYLLABLE_GAGG}";		/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL SYLLABLE GAGG\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL SYLLABLE GAGG\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *j = U"\N{HANGUL SYLLABLE }";			/* { dg-error "is not a valid universal character" } */
 const char32_t *k = U"\N{CJK-COMPATIBILITY-IDEOGRAPH-2F801}";	/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{CJK COMPATIBILITY IDEOGRAPH-2F801\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{CJK COMPATIBILITY IDEOGRAPH-2F801\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *l = U"\N{CjK_COMPATIBILITY IDEOGRAPH 2f801}";	/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{CJK COMPATIBILITY IDEOGRAPH-2F801\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{CJK COMPATIBILITY IDEOGRAPH-2F801\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *m = U"\N{CjK_COMPATIBILITY IDEOGRAPH 2f80}";	/* { dg-error "is not a valid universal character" } */
 const char32_t *n = U"\N{CJK COMPATIBILITY IDEOGRAPH-}";	/* { dg-error "is not a valid universal character" } */
 const char32_t *o = U"\N{CJK COMPATIBILITY IDEOGRAPH-X}";	/* { dg-error "is not a valid universal character" } */
 const char32_t *p = U"\N{Tibetan Letter A}";			/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{TIBETAN LETTER A\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{TIBETAN LETTER A\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *q = U"\N{Tibetan LetterA}";			/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{TIBETAN LETTER A\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{TIBETAN LETTER A\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *r = U"\N{Tibetan Letter-A}";			/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{TIBETAN LETTER A\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{TIBETAN LETTER A\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *s = U"\N{Tibetan Letter -A}";			/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{TIBETAN LETTER -A\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{TIBETAN LETTER -A\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *t = U"\N{TibetanLetter  -A}";			/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{TIBETAN LETTER -A\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{TIBETAN LETTER -A\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *u = U"\N{Hangul Jungseong oe}";			/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG OE\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG OE\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *v = U"\N{Hangul Jungseong o- e}";		/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG O-E\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG O-E\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *w = U"\N{HangulJungseongo-e}";			/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG O-E\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG O-E\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *x = U"\N{Hangul Jungseong oe          __   }";	/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG OE\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG OE\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *y = U"\N{Hangul Jungseong o- e     __      }";	/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG O-E\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG O-E\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *z = U"\N{Hangul Jungseong o -e}";		/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG O-E\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG O-E\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *A = U"\N{Hangul Jungseong o -e     __      }";	/* { dg-error "is not a valid universal character" } */
-								/* { dg-message "did you mean \\\\N\\{HANGUL JUNGSEONG O-E\\}\\?" "" { target *-*-* } .-1 } */
+								/* { dg-message "did you mean '\\\\N\\{HANGUL JUNGSEONG O-E\\}'\\?" "" { target *-*-* } .-1 } */
 const char32_t *B = U"\N{O}";					/* { dg-error "is not a valid universal character" } */
--- gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-5.c.jj	2022-09-07 22:49:17.682000693 +0200
+++ gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-5.c	2024-09-13 09:26:33.932323932 +0200
@@ -10,8 +10,8 @@  int b = a\N{});				/* { dg-warning "empt
 int c = a\N{);				/* { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{; treating it as separate tokens" } */
 int d = a\N);
 int e = a\NARG);
-int f = a\N{abc});				/* { dg-warning "\\\\N\\\{abc\\\} is not a valid universal character; treating it as separate tokens" } */
+int f = a\N{abc});				/* { dg-warning "'\\\\N\\\{abc\\\}' is not a valid universal character; treating it as separate tokens" } */
 int g = a\N{ABC.123});				/* { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{ABC; treating it as separate tokens" } */
-int h = a\N{NON-EXISTENT CHAR});	/* { dg-warning "\\\\N\\\{NON-EXISTENT CHAR\\\} is not a valid universal character; treating it as separate tokens" } */
-int i = a\N{Latin_Small_Letter_A_With_Acute});	/* { dg-warning "\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\} is not a valid universal character; treating it as separate tokens" } */
-					/* { dg-message "did you mean \\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}\\?" "" { target *-*-* } .-1 } */
+int h = a\N{NON-EXISTENT CHAR});	/* { dg-warning "'\\\\N\\\{NON-EXISTENT CHAR\\\}' is not a valid universal character; treating it as separate tokens" } */
+int i = a\N{Latin_Small_Letter_A_With_Acute});	/* { dg-warning "'\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\}' is not a valid universal character; treating it as separate tokens" } */
+					/* { dg-message "did you mean '\\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}'\\?" "" { target *-*-* } .-1 } */
--- gcc/testsuite/c-c++-common/cpp/pr88974.c.jj	2020-02-04 23:03:46.354221933 +0100
+++ gcc/testsuite/c-c++-common/cpp/pr88974.c	2024-09-13 10:02:34.580471291 +0200
@@ -2,6 +2,6 @@ 
 /* { dg-do preprocess } */
 
 #if __has_include (<pr88974.h)
-/* { dg-error "missing terminating > character" "" { target *-*-* } .-1 } */
-/* { dg-error "missing '\\\)' after .__has_include. operand" "" { target *-*-* } .-2 } */
+/* { dg-error "missing terminating '>' character" "" { target *-*-* } .-1 } */
+/* { dg-error "missing '\\\)' after '__has_include' operand" "" { target *-*-* } .-2 } */
 #endif
--- gcc/testsuite/c-c++-common/cpp/va-opt-error.c.jj	2020-01-14 20:02:46.649611841 +0100
+++ gcc/testsuite/c-c++-common/cpp/va-opt-error.c	2024-09-13 10:13:45.145201935 +0200
@@ -2,11 +2,11 @@ 
 /* { dg-options "-std=gnu99" { target c } } */
 /* { dg-options "-std=c++2a" { target c++ } } */
 
-#define ERR1(x) __VA_OPT__ /* { dg-warning "__VA_OPT__ can only appear" } */
+#define ERR1(x) __VA_OPT__ /* { dg-warning "'__VA_OPT__' can only appear" } */
 #define ERR2(x) __VA_OPT__( /* { dg-warning "can only appear" } */
 #define ERR3(x) __VA_OPT__() /* { dg-warning "can only appear" } */
 
-#define ERR4(x,...) __VA_OPT__ /* { dg-error "unterminated __VA_OPT__" } */
+#define ERR4(x,...) __VA_OPT__ /* { dg-error "unterminated '__VA_OPT__'" } */
 #define ERR5(x,...) __VA_OPT__( /* { dg-error "unterminated" } */
 #define ERR6(x,...) __VA_OPT__(() /* { dg-error "unterminated" } */
 
--- gcc/testsuite/c-c++-common/cpp/va-opt-pedantic.c.jj	2020-01-14 20:02:46.649611841 +0100
+++ gcc/testsuite/c-c++-common/cpp/va-opt-pedantic.c	2024-09-13 10:14:04.422935674 +0200
@@ -2,4 +2,4 @@ 
 /* { dg-options "-std=c11 -pedantic-errors" { target c } } */
 /* { dg-options "-std=c++17 -pedantic-errors" { target c++ } } */
 
-#define CALL(F, ...) F (7 __VA_OPT__(,) __VA_ARGS__) /* { dg-error "__VA_OPT__ is not available" } */
+#define CALL(F, ...) F (7 __VA_OPT__(,) __VA_ARGS__) /* { dg-error "'__VA_OPT__' is not available" } */
--- gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-1.c.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-1.c	2024-09-13 10:08:32.580520316 +0200
@@ -4,40 +4,40 @@ 
 // { dg-options "-finput-charset=UTF-8 -Winvalid-utf8" }
 
 // a€߿ࠀ퟿𐀀􏿿a		{ dg-bogus "invalid UTF-8 character" }
-// a�a					{ dg-warning "invalid UTF-8 character <80>" }
-// a�a					{ dg-warning "invalid UTF-8 character <bf>" }
-// a�a					{ dg-warning "invalid UTF-8 character <c0>" }
-// a�a					{ dg-warning "invalid UTF-8 character <c1>" }
-// a�a					{ dg-warning "invalid UTF-8 character <f5>" }
-// a�a					{ dg-warning "invalid UTF-8 character <ff>" }
-// a�a					{ dg-warning "invalid UTF-8 character <c2>" }
-// a�a					{ dg-warning "invalid UTF-8 character <e0>" }
-// a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" }
-// a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" }
-// a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" }
-// a��a					{ dg-warning "invalid UTF-8 character <ec><80>" }
-// a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" }
-// a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" }
-// a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
-// a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" }
-// a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
-//					{ dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
+// a�a					{ dg-warning "invalid UTF-8 character '<80>'" }
+// a�a					{ dg-warning "invalid UTF-8 character '<bf>'" }
+// a�a					{ dg-warning "invalid UTF-8 character '<c0>'" }
+// a�a					{ dg-warning "invalid UTF-8 character '<c1>'" }
+// a�a					{ dg-warning "invalid UTF-8 character '<f5>'" }
+// a�a					{ dg-warning "invalid UTF-8 character '<ff>'" }
+// a�a					{ dg-warning "invalid UTF-8 character '<c2>'" }
+// a�a					{ dg-warning "invalid UTF-8 character '<e0>'" }
+// a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
+// a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
+// a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" }
+// a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" }
+// a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
+// a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
+// a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
+// a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" }
+// a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" }
+//					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
 /* a€߿ࠀ퟿𐀀􏿿a		{ dg-bogus "invalid UTF-8 character" } */
-/* a�a					{ dg-warning "invalid UTF-8 character <80>" } */
-/* a�a					{ dg-warning "invalid UTF-8 character <bf>" } */
-/* a�a					{ dg-warning "invalid UTF-8 character <c0>" } */
-/* a�a					{ dg-warning "invalid UTF-8 character <c1>" } */
-/* a�a					{ dg-warning "invalid UTF-8 character <f5>" } */
-/* a�a					{ dg-warning "invalid UTF-8 character <ff>" } */
-/* a�a					{ dg-warning "invalid UTF-8 character <c2>" } */
-/* a�a					{ dg-warning "invalid UTF-8 character <e0>" } */
-/* a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" } */
-/* a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" } */
-/* a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" } */
-/* a��a					{ dg-warning "invalid UTF-8 character <ec><80>" } */
-/* a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" } */
-/* a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" } */
-/* a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" } */
-/* a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" } */
-/* a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" } */
-/*					{ dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<80>'" } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<bf>'" } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<c0>'" } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<c1>'" } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<f5>'" } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<ff>'" } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<c2>'" } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<e0>'" } */
+/* a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" } */
+/* a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" } */
+/* a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" } */
+/* a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" } */
+/* a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" } */
+/* a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" } */
+/* a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" } */
+/* a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" } */
+/* a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" } */
+/*					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 } */
--- gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-2.c.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-2.c	2024-09-13 10:09:09.274012870 +0200
@@ -11,78 +11,78 @@  typedef __CHAR16_TYPE__ char16_t;
 typedef __CHAR32_TYPE__ char32_t;
 #endif
 
-char32_t a = U'�';				// { dg-warning "invalid UTF-8 character <80>" }
-char32_t b = U'�';				// { dg-warning "invalid UTF-8 character <bf>" }
-char32_t c = U'�';				// { dg-warning "invalid UTF-8 character <c0>" }
-char32_t d = U'�';				// { dg-warning "invalid UTF-8 character <c1>" }
-char32_t e = U'�';				// { dg-warning "invalid UTF-8 character <f5>" }
-char32_t f = U'�';				// { dg-warning "invalid UTF-8 character <ff>" }
-char32_t g = U'�';				// { dg-warning "invalid UTF-8 character <c2>" }
-char32_t h = U'�';				// { dg-warning "invalid UTF-8 character <e0>" }
-char32_t i = U'���';				// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
-char32_t j = U'���';				// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
-char32_t k = U'��';				// { dg-warning "invalid UTF-8 character <e0><bf>" }
-char32_t l = U'��';				// { dg-warning "invalid UTF-8 character <ec><80>" }
-char32_t m = U'���';				// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
-char32_t n = U'����';				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
-char32_t o = U'����';				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
-char32_t p = U'����';				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
-char32_t q = U'������';				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
+char32_t a = U'�';				// { dg-warning "invalid UTF-8 character '<80>'" }
+char32_t b = U'�';				// { dg-warning "invalid UTF-8 character '<bf>'" }
+char32_t c = U'�';				// { dg-warning "invalid UTF-8 character '<c0>'" }
+char32_t d = U'�';				// { dg-warning "invalid UTF-8 character '<c1>'" }
+char32_t e = U'�';				// { dg-warning "invalid UTF-8 character '<f5>'" }
+char32_t f = U'�';				// { dg-warning "invalid UTF-8 character '<ff>'" }
+char32_t g = U'�';				// { dg-warning "invalid UTF-8 character '<c2>'" }
+char32_t h = U'�';				// { dg-warning "invalid UTF-8 character '<e0>'" }
+char32_t i = U'���';				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
+char32_t j = U'���';				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
+char32_t k = U'��';				// { dg-warning "invalid UTF-8 character '<e0><bf>'" }
+char32_t l = U'��';				// { dg-warning "invalid UTF-8 character '<ec><80>'" }
+char32_t m = U'���';				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
+char32_t n = U'����';				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
+char32_t o = U'����';				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
+char32_t p = U'����';				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" }
+char32_t q = U'������';				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
 const char32_t *A = U"€߿ࠀ퟿𐀀􏿿";	// { dg-bogus "invalid UTF-8 character" }
-const char32_t *B = U"�";			// { dg-warning "invalid UTF-8 character <80>" }
-const char32_t *C = U"�";			// { dg-warning "invalid UTF-8 character <bf>" }
-const char32_t *D = U"�";			// { dg-warning "invalid UTF-8 character <c0>" }
-const char32_t *E = U"�";			// { dg-warning "invalid UTF-8 character <c1>" }
-const char32_t *F = U"�";			// { dg-warning "invalid UTF-8 character <f5>" }
-const char32_t *G = U"�";			// { dg-warning "invalid UTF-8 character <ff>" }
-const char32_t *H = U"�";			// { dg-warning "invalid UTF-8 character <c2>" }
-const char32_t *I = U"�";			// { dg-warning "invalid UTF-8 character <e0>" }
-const char32_t *J = U"���";			// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
-const char32_t *K = U"���";			// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
-const char32_t *L = U"��";			// { dg-warning "invalid UTF-8 character <e0><bf>" }
-const char32_t *M = U"��";			// { dg-warning "invalid UTF-8 character <ec><80>" }
-const char32_t *N = U"���";			// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
-const char32_t *O = U"����";			// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
-const char32_t *P = U"����";			// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
-const char32_t *Q = U"����";			// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
-const char32_t *R = U"������";			// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
+const char32_t *B = U"�";			// { dg-warning "invalid UTF-8 character '<80>'" }
+const char32_t *C = U"�";			// { dg-warning "invalid UTF-8 character '<bf>'" }
+const char32_t *D = U"�";			// { dg-warning "invalid UTF-8 character '<c0>'" }
+const char32_t *E = U"�";			// { dg-warning "invalid UTF-8 character '<c1>'" }
+const char32_t *F = U"�";			// { dg-warning "invalid UTF-8 character '<f5>'" }
+const char32_t *G = U"�";			// { dg-warning "invalid UTF-8 character '<ff>'" }
+const char32_t *H = U"�";			// { dg-warning "invalid UTF-8 character '<c2>'" }
+const char32_t *I = U"�";			// { dg-warning "invalid UTF-8 character '<e0>'" }
+const char32_t *J = U"���";			// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
+const char32_t *K = U"���";			// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
+const char32_t *L = U"��";			// { dg-warning "invalid UTF-8 character '<e0><bf>'" }
+const char32_t *M = U"��";			// { dg-warning "invalid UTF-8 character '<ec><80>'" }
+const char32_t *N = U"���";			// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
+const char32_t *O = U"����";			// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
+const char32_t *P = U"����";			// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
+const char32_t *Q = U"����";			// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" }
+const char32_t *R = U"������";			// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
 const char32_t *A1 = UR"(€߿ࠀ퟿𐀀􏿿)"; // { dg-bogus "invalid UTF-8 character" }
-const char32_t *B1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <80>" }
-const char32_t *C1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <bf>" }
-const char32_t *D1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <c0>" }
-const char32_t *E1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <c1>" }
-const char32_t *F1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <f5>" }
-const char32_t *G1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <ff>" }
-const char32_t *H1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <c2>" }
-const char32_t *I1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <e0>" }
-const char32_t *J1 = UR"(??�)";			// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
-const char32_t *K1 = UR"(���)";			// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
-const char32_t *L1 = UR"(��)";			// { dg-warning "invalid UTF-8 character <e0><bf>" }
-const char32_t *M1 = UR"(��)";			// { dg-warning "invalid UTF-8 character <ec><80>" }
-const char32_t *N1 = UR"(���)";			// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
-const char32_t *O1 = UR"(����)";		// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
-const char32_t *P1 = UR"(����)";		// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
-const char32_t *Q1 = UR"(����)";		// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
-const char32_t *R1 = UR"(������)";		// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
+const char32_t *B1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<80>'" }
+const char32_t *C1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<bf>'" }
+const char32_t *D1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<c0>'" }
+const char32_t *E1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<c1>'" }
+const char32_t *F1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<f5>'" }
+const char32_t *G1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<ff>'" }
+const char32_t *H1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<c2>'" }
+const char32_t *I1 = UR"(�)";			// { dg-warning "invalid UTF-8 character '<e0>'" }
+const char32_t *J1 = UR"(���)";			// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
+const char32_t *K1 = UR"(���)";			// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
+const char32_t *L1 = UR"(��)";			// { dg-warning "invalid UTF-8 character '<e0><bf>'" }
+const char32_t *M1 = UR"(��)";			// { dg-warning "invalid UTF-8 character '<ec><80>'" }
+const char32_t *N1 = UR"(���)";			// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
+const char32_t *O1 = UR"(����)";		// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
+const char32_t *P1 = UR"(����)";		// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
+const char32_t *Q1 = UR"(����)";		// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" }
+const char32_t *R1 = UR"(������)";		// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
 const char *A2 = u8"€߿ࠀ퟿𐀀􏿿";	// { dg-bogus "invalid UTF-8 character" }
-const char *B2 = u8"�";				// { dg-warning "invalid UTF-8 character <80>" }
-const char *C2 = u8"�";				// { dg-warning "invalid UTF-8 character <bf>" }
-const char *D2 = u8"�";				// { dg-warning "invalid UTF-8 character <c0>" }
-const char *E2 = u8"�";				// { dg-warning "invalid UTF-8 character <c1>" }
-const char *F2 = u8"�";				// { dg-warning "invalid UTF-8 character <f5>" }
-const char *G2 = u8"�";				// { dg-warning "invalid UTF-8 character <ff>" }
-const char *H2 = u8"�";				// { dg-warning "invalid UTF-8 character <c2>" }
-const char *I2 = u8"�";				// { dg-warning "invalid UTF-8 character <e0>" }
-const char *J2 = u8"���";			// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
-const char *K2 = u8"���";			// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
-const char *L2 = u8"��";			// { dg-warning "invalid UTF-8 character <e0><bf>" }
-const char *M2 = u8"��";			// { dg-warning "invalid UTF-8 character <ec><80>" }
-const char *N2 = u8"���";			// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
-const char *O2 = u8"����";			// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
-const char *P2 = u8"����";			// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
-const char *Q2 = u8"����";			// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
-const char *R2 = u8"������";			// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
+const char *B2 = u8"�";				// { dg-warning "invalid UTF-8 character '<80>'" }
+const char *C2 = u8"�";				// { dg-warning "invalid UTF-8 character '<bf>'" }
+const char *D2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c0>'" }
+const char *E2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c1>'" }
+const char *F2 = u8"�";				// { dg-warning "invalid UTF-8 character '<f5>'" }
+const char *G2 = u8"�";				// { dg-warning "invalid UTF-8 character '<ff>'" }
+const char *H2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c2>'" }
+const char *I2 = u8"�";				// { dg-warning "invalid UTF-8 character '<e0>'" }
+const char *J2 = u8"���";			// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
+const char *K2 = u8"���";			// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
+const char *L2 = u8"��";			// { dg-warning "invalid UTF-8 character '<e0><bf>'" }
+const char *M2 = u8"��";			// { dg-warning "invalid UTF-8 character '<ec><80>'" }
+const char *N2 = u8"��?";			// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
+const char *O2 = u8"����";			// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
+const char *P2 = u8"����";			// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
+const char *Q2 = u8"����";			// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" }
+const char *R2 = u8"������";			// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
--- gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-3.c.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/c-c++-common/cpp/Winvalid-utf8-3.c	2024-09-13 10:09:24.901796747 +0200
@@ -6,22 +6,22 @@ 
 #define I(x)
 I(€߿ࠀ퟿𐀀􏿿)	// { dg-bogus "invalid UTF-8 character" }
                                 // { dg-error "is not valid in an identifier" "" { target c++ } .-1 }
-I(�)				// { dg-warning "invalid UTF-8 character <80>" }
-I(�)				// { dg-warning "invalid UTF-8 character <bf>" }
-I(�)				// { dg-warning "invalid UTF-8 character <c0>" }
-I(�)				// { dg-warning "invalid UTF-8 character <c1>" }
-I(�)				// { dg-warning "invalid UTF-8 character <f5>" }
-I(�)				// { dg-warning "invalid UTF-8 character <ff>" }
-I(�)				// { dg-warning "invalid UTF-8 character <c2>" }
-I(�)				// { dg-warning "invalid UTF-8 character <e0>" }
-I(���)				// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
-I(���)				// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
-I(��)				// { dg-warning "invalid UTF-8 character <e0><bf>" }
-I(��)				// { dg-warning "invalid UTF-8 character <ec><80>" }
-I(���)				// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
-I(����)				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
-I(����)				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
-I(����)				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c } }
+I(�)				// { dg-warning "invalid UTF-8 character '<80>'" }
+I(�)				// { dg-warning "invalid UTF-8 character '<bf>'" }
+I(�)				// { dg-warning "invalid UTF-8 character '<c0>'" }
+I(�)				// { dg-warning "invalid UTF-8 character '<c1>'" }
+I(�)				// { dg-warning "invalid UTF-8 character '<f5>'" }
+I(�)				// { dg-warning "invalid UTF-8 character '<ff>'" }
+I(�)				// { dg-warning "invalid UTF-8 character '<c2>'" }
+I(�)				// { dg-warning "invalid UTF-8 character '<e0>'" }
+I(���)				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" }
+I(���)				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" }
+I(��)				// { dg-warning "invalid UTF-8 character '<e0><bf>'" }
+I(��)				// { dg-warning "invalid UTF-8 character '<ec><80>'" }
+I(���)				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" }
+I(����)				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" }
+I(����)				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" }
+I(����)				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c } }
                                 // { dg-error "is not valid in an identifier" "" { target c++ } .-1 }
-I(������)			// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c } }
+I(������)			// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c } }
                                 // { dg-error "is not valid in an identifier" "" { target c++ } .-1 }
--- gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-1.c.jj	2023-03-27 22:36:52.329403025 +0200
+++ gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-1.c	2024-09-13 10:14:54.567243094 +0200
@@ -16,8 +16,8 @@ 
        { dg-final { scan-sarif-file "\"level\": \"warning\"" } }
        { dg-final { scan-sarif-file "\"ruleId\": \"-Winvalid-utf8\"" } }
        { dg-final { scan-sarif-file "\"message\": " } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <98>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <99>"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<98>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<99>'"} } }
 */
--- gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-3.c.jj	2023-03-27 22:36:52.329403025 +0200
+++ gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-3.c	2024-09-13 10:15:36.210667932 +0200
@@ -54,42 +54,42 @@ 
        { dg-final { scan-sarif-file "\"level\": \"warning\"" } }
        { dg-final { scan-sarif-file "\"ruleId\": \"-Winvalid-utf8\"" } }
        { dg-final { scan-sarif-file "\"message\": " } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c0>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c1>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f5>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ff>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c2>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><80><bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><9f><80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ec><80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ed><a0><80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f0><80><80><80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f0><8f><bf><bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f4><90><80><80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <fd><bf><bf><bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c0>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c1>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f5>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ff>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <c2>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><80><bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><9f><80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <e0><bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ec><80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <ed><a0><80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f0><80><80><80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f0><8f><bf><bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <f4><90><80><80>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <fd><bf><bf><bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
-         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character <bf>"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c0>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c1>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f5>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ff>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c2>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><80><bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><9f><80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ec><80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ed><a0><80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f0><80><80><80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f0><8f><bf><bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f4><90><80><80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<fd><bf><bf><bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c0>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c1>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f5>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ff>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<c2>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><80><bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><9f><80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<e0><bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ec><80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<ed><a0><80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f0><80><80><80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f0><8f><bf><bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<f4><90><80><80>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<fd><bf><bf><bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
+         { dg-final { scan-sarif-file {"text": "invalid UTF-8 character '<bf>'"} } }
 */
--- gcc/testsuite/c-c++-common/pr68833-3.c.jj	2020-01-14 20:02:46.668611556 +0100
+++ gcc/testsuite/c-c++-common/pr68833-3.c	2024-09-13 10:20:26.529658154 +0200
@@ -2,6 +2,6 @@ 
 /* { dg-do preprocess } */
 /* { dg-options "-Werror=normalized" } */
 
-\u0F43  // { dg-error "`.U00000f43' is not in NFC .-Werror=normalized=." }
+\u0F43  // { dg-error "'.U00000f43' is not in NFC .-Werror=normalized=." }
 
 /* { dg-prune-output "treated as errors" } */
--- gcc/testsuite/c-c++-common/raw-string-directive-1.c.jj	2022-11-05 20:51:33.396159443 +0100
+++ gcc/testsuite/c-c++-common/raw-string-directive-1.c	2024-09-13 11:04:41.242185607 +0200
@@ -32,19 +32,19 @@  line12
 )"
 
 #if R"(line 13 /* { dg-error "line13" } */
-file:35:1: error: line14)" /* { dg-error "line14\\)\"\" is not valid" } */
-#endif R"(line 15 /* { dg-warning "extra tokens at end of #endif" } */
+file:35:1: error: line14)"
+#endif R"(line 15 /* { dg-warning "extra tokens at end of '#endif'" } */
 \
 line16)" ""
 
-#ifdef XYZ R"(line17 /* { dg-warning "extra tokens at end of #ifdef" } */
+#ifdef XYZ R"(line17 /* { dg-warning "extra tokens at end of '#ifdef'" } */
 \
 \
 line18)"
 #endif
 
 #if 1
-#else R"(line23 /* { dg-warning "extra tokens at end of #else" } */
+#else R"(line23 /* { dg-warning "extra tokens at end of '#else'" } */
 \
 
 line24)"
@@ -52,7 +52,7 @@  line24)"
 
 #if 0
 #elif R"(line 25 /* { dg-error "line25" } */
-file:55:1: error: line26)" /* { dg-error "line26\\)\"\" is not valid" } */
+file:55:1: error: line26)"
 #endif
 
 #line 60 R"(file:60:1: warning: this file has a space
@@ -61,13 +61,13 @@  in it!)"
 /* { dg-warning "this file has a space" "#line check" { target *-*-* } 60 } */
 #line 63 "file"
 
-#undef X1 R"(line28 /* { dg-warning "extra tokens at end of #undef" } */
+#undef X1 R"(line28 /* { dg-warning "extra tokens at end of '#undef'" } */
 line29
 \
 )"
 
 #ident R"(line30
-line31)" R"(line 32 /* { dg-warning "extra tokens at end of #ident" } */
+line31)" R"(line 32 /* { dg-warning "extra tokens at end of '#ident'" } */
 line 33)"
 
 #pragma GCC diagnostic ignored R"(-Woption /* { dg-warning "-Wpragmas" } */
--- gcc/testsuite/gcc.dg/analyzer/named-constants-Wunused-macros.c.jj	2022-11-17 22:10:05.811657288 +0100
+++ gcc/testsuite/gcc.dg/analyzer/named-constants-Wunused-macros.c	2024-09-13 09:14:54.198038830 +0200
@@ -7,9 +7,9 @@ 
 
 /* Various constants used by the fd state machine.  */
 
-#define O_ACCMODE 42   /* { dg-warning "-: macro \"O_ACCMODE\" is not used" } */
-#define O_RDONLY  0x1  /* { dg-warning "-: macro \"O_RDONLY\" is not used" } */
-#define O_WRONLY  010  /* { dg-warning "-: macro \"O_WRONLY\" is not used" } */
+#define O_ACCMODE 42   /* { dg-warning "-: macro 'O_ACCMODE' is not used" } */
+#define O_RDONLY  0x1  /* { dg-warning "-: macro 'O_RDONLY' is not used" } */
+#define O_WRONLY  010  /* { dg-warning "-: macro 'O_WRONLY' is not used" } */
 
 void test_sm_fd_constants (void)
 {
--- gcc/testsuite/gcc.dg/binary-constants-4.c.jj	2020-01-14 20:02:47.225603213 +0100
+++ gcc/testsuite/gcc.dg/binary-constants-4.c	2024-09-13 11:36:25.100157383 +0200
@@ -11,8 +11,8 @@  foo(void)
   int i;
 
   d = 0b1101;
-  d = 0b1101p1; /* { dg-error "invalid suffix \"p1\" on integer constant" } */
+  d = 0b1101p1; /* { dg-error "invalid suffix 'p1' on integer constant" } */
   d = 0x1101p1;
-  i = 0b3011;   /* { dg-error "invalid suffix \"b3011\" on integer constant" } */
-  i = 0b113;    /* { dg-error "invalid digit \"3\" in binary constant" } */
+  i = 0b3011;   /* { dg-error "invalid suffix 'b3011' on integer constant" } */
+  i = 0b113;    /* { dg-error "invalid digit '3' in binary constant" } */
 }
--- gcc/testsuite/gcc.dg/builtin-redefine.c.jj	2023-06-26 09:27:04.362366331 +0200
+++ gcc/testsuite/gcc.dg/builtin-redefine.c	2024-09-13 10:19:53.097119913 +0200
@@ -27,7 +27,7 @@ 
 #define __TIME__ "X"         /* Define while undefined.  */
 #define __TIME__ "X"         /* Re-define while defined.  */ /* { dg-line time_prev } */
 
-#define __TIME__ "Y"         /* { dg-warning "\"__TIME__\" redefined" } */
+#define __TIME__ "Y"         /* { dg-warning "'__TIME__' redefined" } */
 /* { dg-message "previous definition" "" { target *-*-* } time_prev } */
 
 #undef __TIME__              /* Undefine while defined.  */
@@ -38,7 +38,7 @@ 
 #define __DATE__ "X"         /* Define while undefined.  */
 #define __DATE__ "X"         /* Re-define while defined.  */ /* { dg-line date_prev } */
 
-#define __DATE__ "Y"         /* { dg-warning "\"__DATE__\" redefined" } */
+#define __DATE__ "Y"         /* { dg-warning "'__DATE__' redefined" } */
 /* { dg-message "previous definition" "" { target *-*-* } date_prev } */
 
 #undef __DATE__              /* Undefine while defined.  */
@@ -47,7 +47,7 @@ 
 #define __TIMESTAMP__ "X"    /* Define while already defined.  */
 #define __TIMESTAMP__ "X"    /* Re-define while defined.  */ /* { dg-line timestamp_prev } */
 
-#define __TIMESTAMP__ "Y"    /* { dg-warning "\"__TIMESTAMP__\" redefined" } */
+#define __TIMESTAMP__ "Y"    /* { dg-warning "'__TIMESTAMP__' redefined" } */
 /* { dg-message "previous definition" "" { target *-*-* } timestamp_prev } */
 
 #undef __TIMESTAMP__         /* Undefine while defined.  */
@@ -71,9 +71,9 @@ 
 /* { dg-bogus "Expected built-in is not defined" "" { target *-*-* } .-1 } */
 #endif
 
-#define __LINE__ 0           /* { dg-warning "\"__LINE__\" redef" } */
-#define __INCLUDE_LEVEL__ 0  /* { dg-warning "\"__INCLUDE_LEVEL__\" redef" } */
-#define __COUNTER__ 0        /* { dg-warning "\"__COUNTER__\" redef" } */
+#define __LINE__ 0           /* { dg-warning "'__LINE__' redef" } */
+#define __INCLUDE_LEVEL__ 0  /* { dg-warning "'__INCLUDE_LEVEL__' redef" } */
+#define __COUNTER__ 0        /* { dg-warning "'__COUNTER__' redef" } */
 
 
 int unused;  /* Silence `ISO C forbids an empty translation unit' warning.  */
--- gcc/testsuite/gcc.dg/cpp/19951025-1.c.jj	2020-01-14 20:02:47.250602839 +0100
+++ gcc/testsuite/gcc.dg/cpp/19951025-1.c	2024-09-13 09:15:40.657393073 +0200
@@ -1,4 +1,4 @@ 
 /* { dg-do preprocess } */
-/* { dg-error "include expects" "include" { target *-*-* } .+2 } */
+/* { dg-error "'#include' expects" "include" { target *-*-* } .+2 } */
 /* { dg-error "newline at end" "newline" { target *-*-* } .+1 } */
 #include /\
--- gcc/testsuite/gcc.dg/cpp/c11-warning-1.c.jj	2023-11-07 23:15:16.676412791 +0100
+++ gcc/testsuite/gcc.dg/cpp/c11-warning-1.c	2024-09-13 09:16:12.268953690 +0200
@@ -3,4 +3,4 @@ 
 /* { dg-options "-std=c11 -pedantic-errors" } */
 
 #warning example text /* { dg-warning "example text" } */
-/* { dg-error "#warning before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
+/* { dg-error "'#warning' before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
--- gcc/testsuite/gcc.dg/cpp/c11-warning-2.c.jj	2023-11-07 23:15:16.676412791 +0100
+++ gcc/testsuite/gcc.dg/cpp/c11-warning-2.c	2024-09-13 09:16:26.440756713 +0200
@@ -3,4 +3,4 @@ 
 /* { dg-options "-std=c11 -pedantic" } */
 
 #warning example text /* { dg-warning "example text" } */
-/* { dg-warning "#warning before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
+/* { dg-warning "'#warning' before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
--- gcc/testsuite/gcc.dg/cpp/c11-warning-3.c.jj	2023-11-07 23:15:16.676412791 +0100
+++ gcc/testsuite/gcc.dg/cpp/c11-warning-3.c	2024-09-13 09:16:40.989554490 +0200
@@ -3,4 +3,4 @@ 
 /* { dg-options "-std=c11 -Wc11-c23-compat" } */
 
 #warning example text /* { dg-warning "example text" } */
-/* { dg-warning "#warning before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
+/* { dg-warning "'#warning' before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
--- gcc/testsuite/gcc.dg/cpp/c23-elifdef-2.c.jj	2023-11-08 23:04:12.263052031 +0100
+++ gcc/testsuite/gcc.dg/cpp/c23-elifdef-2.c	2024-09-13 09:28:39.447584387 +0200
@@ -5,53 +5,53 @@ 
 #define A
 #undef B
 
-#elifdef A /* { dg-error "#elifdef without #if" } */
-#elifdef B /* { dg-error "#elifdef without #if" } */
-#elifndef A /* { dg-error "#elifndef without #if" } */
-#elifndef B /* { dg-error "#elifndef without #if" } */
+#elifdef A /* { dg-error "'#elifdef' without '#if'" } */
+#elifdef B /* { dg-error "'#elifdef' without '#if'" } */
+#elifndef A /* { dg-error "'#elifndef' without '#if'" } */
+#elifndef B /* { dg-error "'#elifndef' without '#if'" } */
 
 #if 1 /* { dg-error "-:began here" } */
 #else
-#elifdef A /* { dg-error "#elifdef after #else" } */
+#elifdef A /* { dg-error "'#elifdef' after '#else'" } */
 #endif
 
 #if 1 /* { dg-error "-:began here" } */
 #else
-#elifdef B /* { dg-error "#elifdef after #else" } */
+#elifdef B /* { dg-error "'#elifdef' after '#else'" } */
 #endif
 
 #if 1 /* { dg-error "-:began here" } */
 #else
-#elifndef A /* { dg-error "#elifndef after #else" } */
+#elifndef A /* { dg-error "'#elifndef' after '#else'" } */
 #endif
 
 #if 1 /* { dg-error "-:began here" } */
 #else
-#elifndef B /* { dg-error "#elifndef after #else" } */
+#elifndef B /* { dg-error "'#elifndef' after '#else'" } */
 #endif
 
 #if 0
-#elifdef A = /* { dg-error "extra tokens at end of #elifdef directive" } */
+#elifdef A = /* { dg-error "extra tokens at end of '#elifdef' directive" } */
 #endif
 
 #if 0
-#elifdef B = /* { dg-error "extra tokens at end of #elifdef directive" } */
+#elifdef B = /* { dg-error "extra tokens at end of '#elifdef' directive" } */
 #endif
 
 #if 0
-#elifndef A = /* { dg-error "extra tokens at end of #elifndef directive" } */
+#elifndef A = /* { dg-error "extra tokens at end of '#elifndef' directive" } */
 #endif
 
 #if 0
-#elifndef B = /* { dg-error "extra tokens at end of #elifndef directive" } */
+#elifndef B = /* { dg-error "extra tokens at end of '#elifndef' directive" } */
 #endif
 
 #if 0
-#elifdef /* { dg-error "no macro name given in #elifdef directive" } */
+#elifdef /* { dg-error "no macro name given in '#elifdef' directive" } */
 #endif
 
 #if 0
-#elifndef /* { dg-error "no macro name given in #elifndef directive" } */
+#elifndef /* { dg-error "no macro name given in '#elifndef' directive" } */
 #endif
 
 #if 0
--- gcc/testsuite/gcc.dg/cpp/c23-warning-2.c.jj	2023-11-08 23:04:12.263052031 +0100
+++ gcc/testsuite/gcc.dg/cpp/c23-warning-2.c	2024-09-13 09:17:09.058164353 +0200
@@ -3,4 +3,4 @@ 
 /* { dg-options "-std=c23 -pedantic-errors -Wc11-c23-compat" } */
 
 #warning example text /* { dg-warning "example text" } */
-/* { dg-warning "#warning before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
+/* { dg-warning "'#warning' before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
--- gcc/testsuite/gcc.dg/cpp/embed-2.c.jj	2024-09-12 23:12:54.032424102 +0200
+++ gcc/testsuite/gcc.dg/cpp/embed-2.c	2024-09-13 09:29:05.961216955 +0200
@@ -6,7 +6,7 @@ 
 #endif
 
 int a =
-#embed __FILE__ limit (1) /* { dg-error "#embed before C23 is a GCC extension" } */
+#embed __FILE__ limit (1) /* { dg-error "'#embed' before C23 is a GCC extension" } */
 ;
 int b =
 (__extension__
--- gcc/testsuite/gcc.dg/cpp/embed-3.c.jj	2024-09-12 23:12:54.033424088 +0200
+++ gcc/testsuite/gcc.dg/cpp/embed-3.c	2024-09-13 09:29:23.330976243 +0200
@@ -6,7 +6,7 @@ 
 #endif
 
 int a =
-#embed __FILE__ limit (1) /* { dg-warning "#embed before C23 is a GCC extension" } */
+#embed __FILE__ limit (1) /* { dg-warning "'#embed' before C23 is a GCC extension" } */
 ;
 int b =
 (__extension__
--- gcc/testsuite/gcc.dg/cpp/embed-4.c.jj	2024-09-12 23:12:54.033424088 +0200
+++ gcc/testsuite/gcc.dg/cpp/embed-4.c	2024-09-13 09:30:18.055217866 +0200
@@ -4,10 +4,10 @@ 
 #if __has_embed(__FILE__ limit(6))
 #endif
 /* { dg-error "-:'__has_embed' not supported in traditional C" "" { target *-*-* } .-2 } */
-/* { dg-error "-:missing binary operator before token \\\"\\\(\\\"" "" { target *-*-* } .-3 } */
+/* { dg-error "-:missing binary operator before token '\\\('" "" { target *-*-* } .-3 } */
 #define FOO 20000,20001,20002
 #define BAR 30000,30001,30002
 #embed __FILE__ limit (4) prefix(10000,10001,10002+) suffix(+10003,10004,10005)
-/* { dg-error "-:#embed not supported in traditional C" "" { target *-*-* } .-1 } */
+/* { dg-error "-:'#embed' not supported in traditional C" "" { target *-*-* } .-1 } */
 #embed __FILE__ limit (6) prefix(FOO,) suffix(,BAR)
-/* { dg-error "-:#embed not supported in traditional C" "" { target *-*-* } .-1 } */
+/* { dg-error "-:'#embed' not supported in traditional C" "" { target *-*-* } .-1 } */
--- gcc/testsuite/gcc.dg/cpp/expr.c.jj	2023-11-28 23:02:11.787089470 +0100
+++ gcc/testsuite/gcc.dg/cpp/expr.c	2024-09-13 09:30:50.835763588 +0200
@@ -9,27 +9,27 @@ 
 
 /* Neil Booth, 19 Jul 2002.  */
 
-#if (1 ? -2: 0 + 1U) < 0 /* { dg-warning {the left operand of ":" changes sign} } */
+#if (1 ? -2: 0 + 1U) < 0 /* { dg-warning {the left operand of ':' changes sign} } */
 #error				/* { dg-bogus "error" } */
 #endif
 
-#if (0 ? 0 + 1U: -2) < 0 /* { dg-warning {the right operand of ":" changes sign} } */
+#if (0 ? 0 + 1U: -2) < 0 /* { dg-warning {the right operand of ':' changes sign} } */
 #error				/* { dg-bogus "error" } */
 #endif
 
 /* PR preprocessor/112701 */
-#if (0 ? 0/0u : -1) < 0 /* { dg-warning {the right operand of ":" changes sign} } */
+#if (0 ? 0/0u : -1) < 0 /* { dg-warning {the right operand of ':' changes sign} } */
 #error /* { dg-bogus "error" } */
 #endif
 
-#if (0 ? 0u/0 : -1) < 0 /* { dg-warning {the right operand of ":" changes sign} } */
+#if (0 ? 0u/0 : -1) < 0 /* { dg-warning {the right operand of ':' changes sign} } */
 #error /* { dg-bogus "error" } */
 #endif
 
-#if (1 ? -1 : 0/0u) < 0 /* { dg-warning {the left operand of ":" changes sign} } */
+#if (1 ? -1 : 0/0u) < 0 /* { dg-warning {the left operand of ':' changes sign} } */
 #error /* { dg-bogus "error" } */
 #endif
 
-#if (1 ? -1 : 0u/0) < 0 /* { dg-warning {the left operand of ":" changes sign} } */
+#if (1 ? -1 : 0u/0) < 0 /* { dg-warning {the left operand of ':' changes sign} } */
 #error /* { dg-bogus "error" } */
 #endif
--- gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-2.c.jj	2021-10-07 23:03:44.118934628 +0200
+++ gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-2.c	2024-09-13 09:32:47.910141161 +0200
@@ -5,53 +5,53 @@ 
 #define A
 #undef B
 
-#elifdef A /* { dg-error "#elifdef without #if" } */
-#elifdef B /* { dg-error "#elifdef without #if" } */
-#elifndef A /* { dg-error "#elifndef without #if" } */
-#elifndef B /* { dg-error "#elifndef without #if" } */
+#elifdef A /* { dg-error "'#elifdef' without '#if'" } */
+#elifdef B /* { dg-error "'#elifdef' without '#if'" } */
+#elifndef A /* { dg-error "'#elifndef' without '#if'" } */
+#elifndef B /* { dg-error "'#elifndef' without '#if'" } */
 
 #if 1 /* { dg-error "-:began here" } */
 #else
-#elifdef A /* { dg-error "#elifdef after #else" } */
+#elifdef A /* { dg-error "'#elifdef' after '#else'" } */
 #endif
 
 #if 1 /* { dg-error "-:began here" } */
 #else
-#elifdef B /* { dg-error "#elifdef after #else" } */
+#elifdef B /* { dg-error "'#elifdef' after '#else'" } */
 #endif
 
 #if 1 /* { dg-error "-:began here" } */
 #else
-#elifndef A /* { dg-error "#elifndef after #else" } */
+#elifndef A /* { dg-error "'#elifndef' after '#else'" } */
 #endif
 
 #if 1 /* { dg-error "-:began here" } */
 #else
-#elifndef B /* { dg-error "#elifndef after #else" } */
+#elifndef B /* { dg-error "'#elifndef' after '#else'" } */
 #endif
 
 #if 0
-#elifdef A = /* { dg-warning "extra tokens at end of #elifdef directive" } */
+#elifdef A = /* { dg-warning "extra tokens at end of '#elifdef' directive" } */
 #endif
 
 #if 0
-#elifdef B = /* { dg-warning "extra tokens at end of #elifdef directive" } */
+#elifdef B = /* { dg-warning "extra tokens at end of '#elifdef' directive" } */
 #endif
 
 #if 0
-#elifndef A = /* { dg-warning "extra tokens at end of #elifndef directive" } */
+#elifndef A = /* { dg-warning "extra tokens at end of '#elifndef' directive" } */
 #endif
 
 #if 0
-#elifndef B = /* { dg-warning "extra tokens at end of #elifndef directive" } */
+#elifndef B = /* { dg-warning "extra tokens at end of '#elifndef' directive" } */
 #endif
 
 #if 0
-#elifdef /* { dg-error "no macro name given in #elifdef directive" } */
+#elifdef /* { dg-error "no macro name given in '#elifdef' directive" } */
 #endif
 
 #if 0
-#elifndef /* { dg-error "no macro name given in #elifndef directive" } */
+#elifndef /* { dg-error "no macro name given in '#elifndef' directive" } */
 #endif
 
 #if 0
--- gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-3.c.jj	2023-11-07 23:15:16.676412791 +0100
+++ gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-3.c	2024-09-13 09:33:40.750408891 +0200
@@ -6,7 +6,7 @@ 
 #undef B
 
 #if 0
-#elifdef A	/* { dg-warning "#elifdef before C23 is a GCC extension" } */
+#elifdef A	/* { dg-warning "'#elifdef' before C23 is a GCC extension" } */
 #define M1 1
 #endif
 
@@ -25,7 +25,7 @@ 
 #endif
 
 #if 0
-#elifndef B	/* { dg-warning "#elifndef before C23 is a GCC extension" } */
+#elifndef B	/* { dg-warning "'#elifndef' before C23 is a GCC extension" } */
 #define M2 2
 #endif
 
@@ -34,32 +34,32 @@ 
 #endif
 
 #if 0
-#elifdef A	/* { dg-warning "#elifdef before C23 is a GCC extension" } */
+#elifdef A	/* { dg-warning "'#elifdef' before C23 is a GCC extension" } */
 #else
 #error "#elifdef A did not apply"
 #endif
 
 #if 0
-#elifndef B	/* { dg-warning "#elifndef before C23 is a GCC extension" } */
+#elifndef B	/* { dg-warning "'#elifndef' before C23 is a GCC extension" } */
 #else
 #error "#elifndef B did not apply"
 #endif
 
 #if 1
-#elifdef A	/* { dg-warning "#elifdef before C23 is a GCC extension" } */
+#elifdef A	/* { dg-warning "'#elifdef' before C23 is a GCC extension" } */
 #endif
 
 #if 1
-#elifndef B	/* { dg-warning "#elifndef before C23 is a GCC extension" } */
+#elifndef B	/* { dg-warning "'#elifndef' before C23 is a GCC extension" } */
 #endif
 
 /* As with #elif, the syntax of the new directives is relaxed after a
    non-skipped group.  */
 
 #if 1
-#elifdef x * y	/* { dg-warning "#elifdef before C23 is a GCC extension" } */
+#elifdef x * y	/* { dg-warning "'#elifdef' before C23 is a GCC extension" } */
 #endif
 
 #if 1
-#elifndef !	/* { dg-warning "#elifndef before C23 is a GCC extension" } */
+#elifndef !	/* { dg-warning "'#elifndef' before C23 is a GCC extension" } */
 #endif
--- gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-4.c.jj	2023-11-07 23:15:16.676412791 +0100
+++ gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-4.c	2024-09-13 09:34:33.057684009 +0200
@@ -6,7 +6,7 @@ 
 #undef B
 
 #if 0
-#elifdef A	/* { dg-error "#elifdef before C23 is a GCC extension" } */
+#elifdef A	/* { dg-error "'#elifdef' before C23 is a GCC extension" } */
 #define M1 1
 #endif
 
@@ -25,7 +25,7 @@ 
 #endif
 
 #if 0
-#elifndef B	/* { dg-error "#elifndef before C23 is a GCC extension" } */
+#elifndef B	/* { dg-error "'#elifndef' before C23 is a GCC extension" } */
 #define M2 2
 #endif
 
@@ -34,32 +34,32 @@ 
 #endif
 
 #if 0
-#elifdef A	/* { dg-error "#elifdef before C23 is a GCC extension" } */
+#elifdef A	/* { dg-error "'#elifdef' before C23 is a GCC extension" } */
 #else
 #error "#elifdef A did not apply"
 #endif
 
 #if 0
-#elifndef B	/* { dg-error "#elifndef before C23 is a GCC extension" } */
+#elifndef B	/* { dg-error "'#elifndef' before C23 is a GCC extension" } */
 #else
 #error "#elifndef B did not apply"
 #endif
 
 #if 1
-#elifdef A	/* { dg-error "#elifdef before C23 is a GCC extension" } */
+#elifdef A	/* { dg-error "'#elifdef' before C23 is a GCC extension" } */
 #endif
 
 #if 1
-#elifndef B	/* { dg-error "#elifndef before C23 is a GCC extension" } */
+#elifndef B	/* { dg-error "'#elifndef' before C23 is a GCC extension" } */
 #endif
 
 /* As with #elif, the syntax of the new directives is relaxed after a
    non-skipped group.  */
 
 #if 1
-#elifdef x * y	/* { dg-error "#elifdef before C23 is a GCC extension" } */
+#elifdef x * y	/* { dg-error "'#elifdef' before C23 is a GCC extension" } */
 #endif
 
 #if 1
-#elifndef !	/* { dg-error "#elifndef before C23 is a GCC extension" } */
+#elifndef !	/* { dg-error "'#elifndef' before C23 is a GCC extension" } */
 #endif
--- gcc/testsuite/gcc.dg/cpp/gnu11-warning-1.c.jj	2023-11-07 23:15:16.676412791 +0100
+++ gcc/testsuite/gcc.dg/cpp/gnu11-warning-1.c	2024-09-13 10:03:13.504932987 +0200
@@ -3,4 +3,4 @@ 
 /* { dg-options "-std=gnu11 -pedantic-errors" } */
 
 #warning example text /* { dg-warning "example text" } */
-/* { dg-error "#warning before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
+/* { dg-error "'#warning' before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
--- gcc/testsuite/gcc.dg/cpp/gnu11-warning-2.c.jj	2023-11-07 23:15:16.677412777 +0100
+++ gcc/testsuite/gcc.dg/cpp/gnu11-warning-2.c	2024-09-13 10:03:23.260798068 +0200
@@ -3,4 +3,4 @@ 
 /* { dg-options "-std=gnu11 -pedantic" } */
 
 #warning example text /* { dg-warning "example text" } */
-/* { dg-warning "#warning before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
+/* { dg-warning "'#warning' before C23 is a GCC extension" "pedantic" { target *-*-* } .-1 } */
--- gcc/testsuite/gcc.dg/cpp/gnu11-warning-3.c.jj	2023-11-07 23:15:16.677412777 +0100
+++ gcc/testsuite/gcc.dg/cpp/gnu11-warning-3.c	2024-09-13 10:03:33.458657039 +0200
@@ -3,4 +3,4 @@ 
 /* { dg-options "-std=gnu11 -Wc11-c23-compat" } */
 
 #warning example text /* { dg-warning "example text" } */
-/* { dg-warning "#warning before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
+/* { dg-warning "'#warning' before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
--- gcc/testsuite/gcc.dg/cpp/gnu23-warning-2.c.jj	2023-11-08 23:04:12.263052031 +0100
+++ gcc/testsuite/gcc.dg/cpp/gnu23-warning-2.c	2024-09-13 10:03:55.953345947 +0200
@@ -3,4 +3,4 @@ 
 /* { dg-options "-std=gnu23 -pedantic-errors -Wc11-c23-compat" } */
 
 #warning example text /* { dg-warning "example text" } */
-/* { dg-warning "#warning before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
+/* { dg-warning "'#warning' before C23 is a GCC extension" "compat" { target *-*-* } .-1 } */
--- gcc/testsuite/gcc.dg/cpp/include6.c.jj	2020-01-14 20:02:47.256602748 +0100
+++ gcc/testsuite/gcc.dg/cpp/include6.c	2024-09-13 10:04:29.889876620 +0200
@@ -3,12 +3,12 @@ 
 
 #include <stddef.h>
 #include "stddef.h"
-#include L"stddef.h"		/* { dg-error "include expects" } */
-#include u"stddef.h"		/* { dg-error "include expects" } */
-#include U"stddef.h"		/* { dg-error "include expects" } */
-#include u8"stddef.h"		/* { dg-error "include expects" } */
-#include R"(stddef.h)"		/* { dg-error "include expects" } */
-#include LR"(stddef.h)"		/* { dg-error "include expects" } */
-#include uR"(stddef.h)"		/* { dg-error "include expects" } */
-#include UR"(stddef.h)"		/* { dg-error "include expects" } */
-#include u8R"(stddef.h)"	/* { dg-error "include expects" } */
+#include L"stddef.h"		/* { dg-error "'#include' expects" } */
+#include u"stddef.h"		/* { dg-error "'#include' expects" } */
+#include U"stddef.h"		/* { dg-error "'#include' expects" } */
+#include u8"stddef.h"		/* { dg-error "'#include' expects" } */
+#include R"(stddef.h)"		/* { dg-error "'#include' expects" } */
+#include LR"(stddef.h)"		/* { dg-error "'#include' expects" } */
+#include uR"(stddef.h)"		/* { dg-error "'#include' expects" } */
+#include UR"(stddef.h)"		/* { dg-error "'#include' expects" } */
+#include u8R"(stddef.h)"	/* { dg-error "'#include' expects" } */
--- gcc/testsuite/gcc.dg/cpp/pr35322.c.jj	2020-01-14 20:02:47.259602704 +0100
+++ gcc/testsuite/gcc.dg/cpp/pr35322.c	2024-09-13 09:37:37.032143154 +0200
@@ -1,4 +1,4 @@ 
 /* Test case for PR 35322 -- _Pragma ICE.  */
 
 /* { dg-do preprocess } */
-_Pragma("GCC dependency") /* { dg-error "#pragma dependency expects" } */
+_Pragma("GCC dependency") /* { dg-error "'#pragma GCC dependency' expects" } */
--- gcc/testsuite/gcc.dg/cpp/tr-warn6.c.jj	2020-01-14 20:02:47.262602659 +0100
+++ gcc/testsuite/gcc.dg/cpp/tr-warn6.c	2024-09-13 10:05:03.649409740 +0200
@@ -4,15 +4,15 @@ 
 /* { dg-do preprocess } */
 /* { dg-options "-Wtraditional" } */
 
-#define foo1(h) sdf "h3" fds "h" /* { dg-warning "macro argument \"h\" would be stringified" "traditional stringification" } */
-#define foo2(h2) sdf "h2" fds "h3" /* { dg-warning "macro argument \"h2\" would be stringified" "traditional stringification" } */
-#define foo3(h3) sdf "h2" fds "h3" /* { dg-warning "macro argument \"h3\" would be stringified" "traditional stringification" } */
-#define foo4(h) sdf 'h3' fds 'h' /* { dg-warning "macro argument \"h\" would be stringified" "traditional stringification" } */
-#define foo5(h2) sdf 'h2' fds 'h3' /* { dg-warning "macro argument \"h2\" would be stringified" "traditional stringification" } */
-#define foo6(h3) sdf 'h2' fds 'h3' /* { dg-warning "macro argument \"h3\" would be stringified" "traditional stringification" } */
-#define foo7(AA, hello, world, EEE) sdf "A B hello C,world,DhelloE F" fds EEE /* { dg-warning "macro argument \"hello\" would be stringified" "traditional stringification" } */
+#define foo1(h) sdf "h3" fds "h" /* { dg-warning "macro argument 'h' would be stringified" "traditional stringification" } */
+#define foo2(h2) sdf "h2" fds "h3" /* { dg-warning "macro argument 'h2' would be stringified" "traditional stringification" } */
+#define foo3(h3) sdf "h2" fds "h3" /* { dg-warning "macro argument 'h3' would be stringified" "traditional stringification" } */
+#define foo4(h) sdf 'h3' fds 'h' /* { dg-warning "macro argument 'h' would be stringified" "traditional stringification" } */
+#define foo5(h2) sdf 'h2' fds 'h3' /* { dg-warning "macro argument 'h2' would be stringified" "traditional stringification" } */
+#define foo6(h3) sdf 'h2' fds 'h3' /* { dg-warning "macro argument 'h3' would be stringified" "traditional stringification" } */
+#define foo7(AA, hello, world, EEE) sdf "A B hello C,world,DhelloE F" fds EEE /* { dg-warning "macro argument 'hello' would be stringified" "traditional stringification" } */
 /* Catch the second warning from the above line.  */
-/* { dg-warning "macro argument \"world\" would be stringified" "traditional stringification second warning" { target *-*-* } .-2 } */
+/* { dg-warning "macro argument 'world' would be stringified" "traditional stringification second warning" { target *-*-* } .-2 } */
 
 # 19 "sys-header.h" 3
 /* We are in system headers now, no -Wtraditional warnings should issue.  */
--- gcc/testsuite/gcc.dg/cpp/undef2.c.jj	2023-06-26 09:27:04.364366303 +0200
+++ gcc/testsuite/gcc.dg/cpp/undef2.c	2024-09-13 09:38:29.270422526 +0200
@@ -3,11 +3,11 @@ 
 
 /* { dg-do preprocess } */
 
-#undef __DATE__		/* { dg-warning "undefining \"__DATE__\"" } */
-#undef __TIME__		/* { dg-warning "undefining \"__TIME__\"" } */
-#undef __FILE__		/* { dg-warning "undefining \"__FILE__\"" } */
-#undef __LINE__		/* { dg-warning "undefining \"__LINE__\"" } */
-#undef __STDC__		/* { dg-warning "undefining \"__STDC__\"" } */
+#undef __DATE__		/* { dg-warning "undefining '__DATE__'" } */
+#undef __TIME__		/* { dg-warning "undefining '__TIME__'" } */
+#undef __FILE__		/* { dg-warning "undefining '__FILE__'" } */
+#undef __LINE__		/* { dg-warning "undefining '__LINE__'" } */
+#undef __STDC__		/* { dg-warning "undefining '__STDC__'" } */
 
 /* These should be protected from #undef, but aren't, because they
    are set with normal #define commands - and on top of that, some
--- gcc/testsuite/gcc.dg/cpp/warn-comments.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-comments.c	2024-09-13 10:06:01.869604582 +0200
@@ -1,7 +1,7 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wcomments" }
 
-/* /* */  // { dg-warning "4: \"\.\*\" within comment .-Wcomment." }
+/* /* */  // { dg-warning "4: '\.\*\' within comment .-Wcomment." }
 
 // \
           // { dg-warning "1: multi-line comment .-Wcomment." "multi-line" { target *-*-* } .-1 }
--- gcc/testsuite/gcc.dg/cpp/warn-comments-2.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-comments-2.c	2024-09-13 10:05:30.133043484 +0200
@@ -1,7 +1,7 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=comments" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-/* /* */  // { dg-error "\"\.\*\" within comment .-Werror=comment." }
+/* /* */  // { dg-error "'\.\*' within comment .-Werror=comment." }
 
 // \
           // { dg-error "multi-line comment .-Werror=comment." "multi-line" { target *-*-* } .-1 }
--- gcc/testsuite/gcc.dg/cpp/warn-comments-3.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-comments-3.c	2024-09-13 10:05:45.719827927 +0200
@@ -1,7 +1,7 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=comment" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-/* /* */  // { dg-error "\"\.\*\" within comment .-Werror=comment." }
+/* /* */  // { dg-error "'\.\*' within comment .-Werror=comment." }
 
 // \
           // { dg-error "multi-line comment .-Werror=comment." "multi-line" { target *-*-* } .-1 }
--- gcc/testsuite/gcc.dg/cpp/warn-cxx-compat.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-cxx-compat.c	2024-09-13 10:06:43.508028740 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wc++-compat" }
 
-#define not !  // { dg-warning "identifier \"not\" is a special operator name in C\\+\\+ .-Wc\\+\\+-compat." }
+#define not !  // { dg-warning "identifier 'not' is a special operator name in C\\+\\+ .-Wc\\+\\+-compat." }
--- gcc/testsuite/gcc.dg/cpp/warn-cxx-compat-2.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-cxx-compat-2.c	2024-09-13 10:06:33.433168076 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=c++-compat" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-#define not !  // { dg-error "identifier \"not\" is a special operator name in C\\+\\+ .-Werror=c\\+\\+-compat." }
+#define not !  // { dg-error "identifier 'not' is a special operator name in C\\+\\+ .-Werror=c\\+\\+-compat." }
--- gcc/testsuite/gcc.dg/cpp/warn-deprecated.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-deprecated.c	2024-09-13 09:17:54.870527587 +0200
@@ -1,7 +1,7 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wdeprecated" }
 
-#assert x(x)  // { dg-warning "#assert is a deprecated GCC extension .-Wdeprecated." }
+#assert x(x)  // { dg-warning "'#assert' is a deprecated GCC extension .-Wdeprecated." }
 
 #if #x(x)     // { dg-warning "assertions are a deprecated extension .-Wdeprecated." }
 #endif
--- gcc/testsuite/gcc.dg/cpp/warn-deprecated-2.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-deprecated-2.c	2024-09-13 09:17:36.687780318 +0200
@@ -1,7 +1,7 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=deprecated" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-#assert x(x)  // { dg-error "#assert is a deprecated GCC extension .-Werror=deprecated." }
+#assert x(x)  // { dg-error "'#assert' is a deprecated GCC extension .-Werror=deprecated." }
 
 #if #x(x)     // { dg-error "assertions are a deprecated extension .-Werror=deprecated." }
 #endif
--- gcc/testsuite/gcc.dg/cpp/warn-long-long.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-long-long.c	2024-09-13 10:49:43.105434975 +0200
@@ -1,6 +1,6 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wtraditional -Wlong-long" }
 
-#if 0LL  // { dg-warning "traditional C rejects the \"LL\" suffix .-Wlong-long." }
+#if 0LL  // { dg-warning "traditional C rejects the 'LL' suffix .-Wlong-long." }
          // { dg-warning "use of C99 long long integer constant .-Wlong-long." "use long long" { target *-*-* } .-1 }
 #endif
--- gcc/testsuite/gcc.dg/cpp/warn-long-long-2.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-long-long-2.c	2024-09-13 10:49:27.879644101 +0200
@@ -1,6 +1,6 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wtraditional -Werror=long-long" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-#if 0LL  // { dg-error "traditional C rejects the \"LL\" suffix .-Werror=long-long." }
+#if 0LL  // { dg-error "traditional C rejects the 'LL' suffix .-Werror=long-long." }
          // { dg-error "use of C99 long long integer constant .-Werror=long-long." "use long long" { target *-*-* } .-1 }
 #endif
--- gcc/testsuite/gcc.dg/cpp/warn-normalized-1.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-normalized-1.c	2024-09-13 09:18:28.026067303 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wnormalized=nfc" }
 
-\u0F43  // { dg-warning "`.U00000f43' is not in NFC .-Wnormalized=." }
+\u0F43  // { dg-warning "'.U00000f43' is not in NFC .-Wnormalized=." }
--- gcc/testsuite/gcc.dg/cpp/warn-normalized-2.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-normalized-2.c	2024-09-13 09:18:37.504935755 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wnormalized=nfkc" }
 
-\u00AA  // { dg-warning "`.U000000aa' is not in NFKC .-Wnormalized=." }
+\u00AA  // { dg-warning "'.U000000aa' is not in NFKC .-Wnormalized=." }
--- gcc/testsuite/gcc.dg/cpp/warn-normalized-3.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-normalized-3.c	2024-09-13 09:18:49.252772719 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=normalized=nfc" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-\u0F43  // { dg-error "`.U00000f43' is not in NFC .-Werror=normalized=." }
+\u0F43  // { dg-error "'.U00000f43' is not in NFC .-Werror=normalized=." }
--- gcc/testsuite/gcc.dg/cpp/warn-normalized-4-bytes.c.jj	2021-11-01 23:01:30.575702414 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-normalized-4-bytes.c	2024-09-13 09:19:28.158232793 +0200
@@ -8,13 +8,13 @@ 
 
    The UTF-8 encoding of U+0F43 TIBETAN LETTER GHA is: E0 BD 83.  */
 
-foo before_\u0F43_after bar // { dg-error "`before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
+foo before_\u0F43_after bar // { dg-error "'before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
 /* { dg-begin-multiline-output "" }
  foo before_\u0F43_after bar
      ^~~~~~~~~~~~~~~~~~~
    { dg-end-multiline-output "" } */
 
-foo before_གྷ_after bar // { dg-error "`before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
+foo before_གྷ_after bar // { dg-error "'before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
 /* { dg-begin-multiline-output "" }
  foo before_<e0><bd><83>_after bar
      ^~~~~~~~~~~~~~~~~~~~~~~~~
--- gcc/testsuite/gcc.dg/cpp/warn-normalized-4-unicode.c.jj	2021-11-01 23:01:30.575702414 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-normalized-4-unicode.c	2024-09-13 09:39:04.114941851 +0200
@@ -6,13 +6,13 @@ 
    U+0F42 TIBETAN LETTER GA: ག
    U+0FB7 TIBETAN SUBJOINED LETTER HA: ྷ  */
 
-foo before_\u0F43_after bar  // { dg-error "`before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
+foo before_\u0F43_after bar  // { dg-error "'before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
 /* { dg-begin-multiline-output "" }
  foo before_\u0F43_after bar
      ^~~~~~~~~~~~~~~~~~~
    { dg-end-multiline-output "" } */
 
-foo before_གྷ_after bar // { dg-error "`before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
+foo before_གྷ_after bar // { dg-error "'before_.U00000f43_after' is not in NFC .-Werror=normalized=." }
 /* { dg-begin-multiline-output "" }
  foo before_<U+0F43>_after bar
      ^~~~~~~~~~~~~~~~~~~~~
--- gcc/testsuite/gcc.dg/cpp/warn-redefined.c.jj	2023-06-26 09:27:04.364366303 +0200
+++ gcc/testsuite/gcc.dg/cpp/warn-redefined.c	2024-09-13 09:39:52.399275771 +0200
@@ -6,13 +6,13 @@ 
 // { dg-bogus "__TIME__ builtin is not defined" "no-time" { target *-*-* } .-1 }
 #endif
 
-#define __TIME__ "X"  // { dg-warning "\"__TIME__\" redefined .-Wbuiltin-macro-redefined." }
+#define __TIME__ "X"  // { dg-warning "'__TIME__' redefined .-Wbuiltin-macro-redefined." }
 
 #define __TIME__ "Y"  // { dg-bogus "-Wbuiltin-macro-redefined" }
-                      // { dg-warning "\"__TIME__\" redefined" "not-builtin-1" { target *-*-* } .-1 }
+                      // { dg-warning "'__TIME__' redefined" "not-builtin-1" { target *-*-* } .-1 }
                       // { dg-message "previous definition" "previous-1" { target *-*-* } 9 }
 
 #define X "X"
 #define X "Y"         // { dg-bogus "-Wbuiltin-macro-redefined" }
-                      // { dg-warning "\"X\" redefined" "not-builtin-2" { target *-*-* } .-1 }
+                      // { dg-warning "'X' redefined" "not-builtin-2" { target *-*-* } .-1 }
                       // { dg-message "previous definition" "previous-2" { target *-*-* } 15 }
--- gcc/testsuite/gcc.dg/cpp/warn-redefined-2.c.jj	2023-06-26 09:27:04.364366303 +0200
+++ gcc/testsuite/gcc.dg/cpp/warn-redefined-2.c	2024-09-13 09:39:40.259443242 +0200
@@ -6,13 +6,13 @@ 
 // { dg-bogus "__TIME__ builtin is not defined" "no-time" { target *-*-* } .-1 }
 #endif
 
-#define __TIME__ "X"  // { dg-error "\"__TIME__\" redefined .-Werror=builtin-macro-redefined." }
+#define __TIME__ "X"  // { dg-error "'__TIME__' redefined .-Werror=builtin-macro-redefined." }
 
 #define __TIME__ "Y"  // { dg-bogus "-Wbuiltin-macro-redefined" }
-                      // { dg-warning "\"__TIME__\" redefined" "not-builtin-1" { target *-*-* } .-1 }
+                      // { dg-warning "'__TIME__' redefined" "not-builtin-1" { target *-*-* } .-1 }
                       // { dg-message "previous definition" "previous-1" { target *-*-* } 9 }
 
 #define X "X"
 #define X "Y"         // { dg-bogus "-Wbuiltin-macro-redefined" }
-                      // { dg-warning "\"X\" redefined" "not-builtin-2" { target *-*-* } .-1 }
+                      // { dg-warning "'X' redefined" "not-builtin-2" { target *-*-* } .-1 }
                       // { dg-message "previous definition" "previous-2" { target *-*-* } 15 }
--- gcc/testsuite/gcc.dg/cpp/warn-traditional.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-traditional.c	2024-09-13 09:46:09.893068261 +0200
@@ -1,18 +1,18 @@ 
 // { dg-do compile }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wtraditional -Wno-deprecated -Wno-long-long" }
 
-#assert x(x)         // { dg-warning "suggest hiding #assert from traditional C with an indented # .-Wtraditional." }
+#assert x(x)         // { dg-warning "suggest hiding '#assert' from traditional C with an indented '#' .-Wtraditional." }
 
- #define X X         // { dg-warning "traditional C ignores #define with the # indented .-Wtraditional." }
+ #define X X         // { dg-warning "traditional C ignores '#define' with the '#' indented .-Wtraditional." }
 
 #if 0
-#elif 1              // { dg-warning "suggest not using #elif in traditional C .-Wtraditional." }
+#elif 1              // { dg-warning "suggest not using '#elif' in traditional C .-Wtraditional." }
 #endif
 
 #define f(X) X
-int f;               // { dg-warning "function-like macro \"f\" must be used with arguments in traditional C .-Wtraditional." }
+int f;               // { dg-warning "function-like macro 'f' must be used with arguments in traditional C .-Wtraditional." }
 
-#if 0U               // { dg-warning "traditional C rejects the \"U\" suffix .-Wtraditional." }
+#if 0U               // { dg-warning "traditional C rejects the 'U' suffix .-Wtraditional." }
 #endif
 
 #if +1               // { dg-warning " traditional C rejects the unary plus operator .-Wtraditional." }
--- gcc/testsuite/gcc.dg/cpp/warn-traditional-2.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-traditional-2.c	2024-09-13 09:45:22.464722533 +0200
@@ -1,18 +1,18 @@ 
 // { dg-do compile }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=traditional -Wno-deprecated -Wno-long-long" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-#assert x(x)         // { dg-error "suggest hiding #assert from traditional C with an indented # .-Werror=traditional." }
+#assert x(x)         // { dg-error "suggest hiding '#assert' from traditional C with an indented '#' .-Werror=traditional." }
 
- #define X X         // { dg-error "traditional C ignores #define with the # indented .-Werror=traditional." }
+ #define X X         // { dg-error "traditional C ignores '#define' with the '#' indented .-Werror=traditional." }
 
 #if 0
-#elif 1              // { dg-error "suggest not using #elif in traditional C .-Werror=traditional." }
+#elif 1              // { dg-error "suggest not using '#elif' in traditional C .-Werror=traditional." }
 #endif
 
 #define f(X) X
-int f;               // { dg-error "function-like macro \"f\" must be used with arguments in traditional C .-Werror=traditional." }
+int f;               // { dg-error "function-like macro 'f' must be used with arguments in traditional C .-Werror=traditional." }
 
-#if 0U               // { dg-error "traditional C rejects the \"U\" suffix .-Werror=traditional." }
+#if 0U               // { dg-error "traditional C rejects the 'U' suffix .-Werror=traditional." }
 #endif
 
 #if +1               // { dg-error " traditional C rejects the unary plus operator .-Werror=traditional." }
--- gcc/testsuite/gcc.dg/cpp/warn-trigraphs-1.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-trigraphs-1.c	2024-09-13 09:46:35.401716367 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -trigraphs -Wtrigraphs" }
 
-??=  // { dg-warning "trigraph \\?\\?= converted to # .-Wtrigraphs." }
+??=  // { dg-warning "trigraph '\\?\\?=' converted to '#' .-Wtrigraphs." }
--- gcc/testsuite/gcc.dg/cpp/warn-trigraphs-2.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-trigraphs-2.c	2024-09-13 09:46:55.318441618 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wtrigraphs" }
 
-??=  // { dg-warning "trigraph \\?\\?= ignored, use -trigraphs to enable .-Wtrigraphs." }
+??=  // { dg-warning "trigraph '\\?\\?=' ignored, use '-trigraphs' to enable .-Wtrigraphs." }
--- gcc/testsuite/gcc.dg/cpp/warn-trigraphs-3.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-trigraphs-3.c	2024-09-13 09:47:21.814076115 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -trigraphs -Werror=trigraphs" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-??=  // { dg-error "trigraph \\?\\?= converted to # .-Werror=trigraphs." }
+??=  // { dg-error "trigraph '\\?\\?=' converted to '#' .-Werror=trigraphs." }
--- gcc/testsuite/gcc.dg/cpp/warn-trigraphs-4.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-trigraphs-4.c	2024-09-13 09:48:12.141381846 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=trigraphs" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-??=  // { dg-error "trigraph \\?\\?= ignored, use -trigraphs to enable .-Werror=trigraphs." }
+??=  // { dg-error "trigraph '\\?\\?=' ignored, use '-trigraphs' to enable .-Werror=trigraphs." }
--- gcc/testsuite/gcc.dg/cpp/warn-undef.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-undef.c	2024-09-13 09:52:58.330433881 +0200
@@ -1,5 +1,5 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wundef" }
 
-#if x  // { dg-warning "\"x\" is not defined, evaluates to 0 .-Wundef." }
+#if x  // { dg-warning "'x' is not defined, evaluates to '0' .-Wundef." }
 #endif
--- gcc/testsuite/gcc.dg/cpp/warn-undef-2.c.jj	2020-01-14 20:02:47.265602614 +0100
+++ gcc/testsuite/gcc.dg/cpp/warn-undef-2.c	2024-09-13 09:52:43.430639425 +0200
@@ -1,5 +1,5 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=undef" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-#if x  // { dg-error "\"x\" is not defined, evaluates to 0 .-Werror=undef." }
+#if x  // { dg-error "'x' is not defined, evaluates to '0' .-Werror=undef." }
 #endif
--- gcc/testsuite/gcc.dg/cpp/warn-unused-macros.c.jj	2023-06-26 09:27:04.364366303 +0200
+++ gcc/testsuite/gcc.dg/cpp/warn-unused-macros.c	2024-09-13 10:07:35.701306932 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Wunused-macros" }
 
-#define X X  // { dg-warning "9:macro \"X\" is not used .-Wunused-macros." }
+#define X X  // { dg-warning "9:macro 'X' is not used .-Wunused-macros." }
--- gcc/testsuite/gcc.dg/cpp/warn-unused-macros-2.c.jj	2023-06-26 09:27:04.364366303 +0200
+++ gcc/testsuite/gcc.dg/cpp/warn-unused-macros-2.c	2024-09-13 10:07:22.584488329 +0200
@@ -1,4 +1,4 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=unused-macros" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-#define X X  // { dg-error "9:macro \"X\" is not used .-Werror=unused-macros." }
+#define X X  // { dg-error "9:macro 'X' is not used .-Werror=unused-macros." }
--- gcc/testsuite/gcc.dg/pch/counter-2.c.jj	2020-01-14 20:02:47.335601565 +0100
+++ gcc/testsuite/gcc.dg/pch/counter-2.c	2024-09-13 10:21:41.664620418 +0200
@@ -7,7 +7,7 @@ 
 #error __COUNTER__ != 0
 #endif
 
-#include "counter-2.h" /* { dg-warning "not used because `__COUNTER__' is invalid" } */
+#include "counter-2.h" /* { dg-warning "not used because '__COUNTER__' is invalid" } */
 /* { dg-error "counter-2.h: No such file or directory" "no such file" { target *-*-* } 0 } */
 /* { dg-error "one or more PCH files were found, but they were invalid" "invalid files" { target *-*-* } .-2 } */
 /* { dg-message "terminated" "" { target *-*-* } 0 } */
--- gcc/testsuite/g++.dg/cpp0x/udlit-error1.C.jj	2024-06-14 15:18:17.793230368 +0200
+++ gcc/testsuite/g++.dg/cpp0x/udlit-error1.C	2024-09-13 10:39:27.442909364 +0200
@@ -3,7 +3,7 @@ 
 
 void operator""_x(const char *, decltype(sizeof(0)));
 
-#include ""_x		  // { dg-error "include expects" }
+#include ""_x		  // { dg-error "'#include' expects" }
 #line ""_x		  // { dg-error "not a positive integer" }
 #if __has_include(""_x)	  // { dg-error "requires a header-name" }
 #endif
--- gcc/testsuite/g++.dg/cpp23/named-universal-char-escape1.C.jj	2022-09-07 22:49:17.683000679 +0200
+++ gcc/testsuite/g++.dg/cpp23/named-universal-char-escape1.C	2024-09-13 10:25:44.399267858 +0200
@@ -8,9 +8,9 @@  int b = a\N{});				// { dg-warning "empt
 int c = a\N{);				// { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{; treating it as separate tokens" "" { target c++23 } }
 int d = a\N);
 int e = a\NARG);
-int f = a\N{abc});			// { dg-warning "\\\\N\\\{abc\\\} is not a valid universal character; treating it as separate tokens" "" { target c++23 } }
+int f = a\N{abc});			// { dg-warning "'\\\\N\\\{abc\\\}' is not a valid universal character; treating it as separate tokens" "" { target c++23 } }
 int g = a\N{ABC.123});			// { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{ABC; treating it as separate tokens" "" { target c++23 } }
 int h = a\N{NON-EXISTENT CHAR});	// { dg-error "is not a valid universal character" "" { target c++23 } }
 					// { dg-error "was not declared in this scope" "" { target c++23 } .-1 }
-int i = a\N{Latin_Small_Letter_A_With_Acute});	// { dg-warning "\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\} is not a valid universal character; treating it as separate tokens" "" { target c++23 } }
-					// { dg-message "did you mean \\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}\\?" "" { target c++23 } .-1 }
+int i = a\N{Latin_Small_Letter_A_With_Acute});	// { dg-warning "'\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\}' is not a valid universal character; treating it as separate tokens" "" { target c++23 } }
+					// { dg-message "did you mean '\\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}'\\?" "" { target c++23 } .-1 }
--- gcc/testsuite/g++.dg/cpp23/named-universal-char-escape2.C.jj	2022-09-07 22:49:17.683000679 +0200
+++ gcc/testsuite/g++.dg/cpp23/named-universal-char-escape2.C	2024-09-13 10:27:43.516623181 +0200
@@ -9,10 +9,10 @@  int b = a\N{});				// { dg-warning "empt
 int c = a\N{);				// { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{; treating it as separate tokens" }
 int d = a\N);
 int e = a\NARG);
-int f = a\N{abc});			// { dg-warning "\\\\N\\\{abc\\\} is not a valid universal character; treating it as separate tokens" }
+int f = a\N{abc});			// { dg-warning "'\\\\N\\\{abc\\\}' is not a valid universal character; treating it as separate tokens" }
 int g = a\N{ABC.123});			// { dg-warning "'\\\\N\\\{' not terminated with '\\\}' after \\\\N\\\{ABC; treating it as separate tokens" }
 int h = a\N{NON-EXISTENT CHAR});	// { dg-error "is not a valid universal character" "" { target c++23 } }
 					// { dg-error "was not declared in this scope" "" { target c++23 } .-1 }
-					// { dg-warning "\\\\N\\\{NON-EXISTENT CHAR\\\} is not a valid universal character; treating it as separate tokens" "" { target c++20_down } .-2 }
-int i = a\N{Latin_Small_Letter_A_With_Acute});	// { dg-warning "\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\} is not a valid universal character; treating it as separate tokens" }
-					// { dg-message "did you mean \\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}\\?" "" { target *-*-* } .-1 }
+					// { dg-warning "'\\\\N\\\{NON-EXISTENT CHAR\\\}' is not a valid universal character; treating it as separate tokens" "" { target c++20_down } .-2 }
+int i = a\N{Latin_Small_Letter_A_With_Acute});	// { dg-warning "'\\\\N\\\{Latin_Small_Letter_A_With_Acute\\\}' is not a valid universal character; treating it as separate tokens" }
+					// { dg-message "did you mean '\\\\N\\\{LATIN SMALL LETTER A WITH ACUTE\\\}'\\?" "" { target *-*-* } .-1 }
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-1.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-1.C	2024-09-13 10:29:10.065428846 +0200
@@ -4,40 +4,40 @@ 
 // { dg-options "-finput-charset=UTF-8" }
 
 // a€߿ࠀ퟿𐀀􏿿a		{ dg-bogus "invalid UTF-8 character" }
-// a�a					{ dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-// a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-// a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-// a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-// a��a					{ dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-// a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-// a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-// a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-// a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-// a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-//					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+// a�a					{ dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+// a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+// a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+// a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+// a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+// a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+// a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+// a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+// a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+// a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+//					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 /* a€߿ࠀ퟿𐀀􏿿a		{ dg-bogus "invalid UTF-8 character" } */
-/* a�a					{ dg-warning "invalid UTF-8 character <80>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } } */
-/* a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } } */
-/* a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } } */
-/* a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } } */
-/* a��a					{ dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } } */
-/* a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } } */
-/* a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } } */
-/* a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } } */
-/* a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } } */
-/* a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } } */
-/*					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } } */
+/* a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } } */
+/* a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } } */
+/* a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } } */
+/* a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } } */
+/* a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } } */
+/* a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } } */
+/* a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } } */
+/* a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } } */
+/* a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } } */
+/*					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 } */
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-2.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-2.C	2024-09-13 10:29:24.335231933 +0200
@@ -4,40 +4,40 @@ 
 // { dg-options "-finput-charset=UTF-8 -pedantic" }
 
 // a€߿ࠀ퟿𐀀􏿿a		{ dg-bogus "invalid UTF-8 character" }
-// a�a					{ dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-// a�a					{ dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-// a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-// a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-// a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-// a��a					{ dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-// a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-// a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-// a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-// a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-// a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-//					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+// a�a					{ dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+// a�a					{ dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+// a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+// a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+// a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+// a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+// a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+// a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+// a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+// a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+// a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+//					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 /* a€߿ࠀ퟿𐀀􏿿a		{ dg-bogus "invalid UTF-8 character" } */
-/* a�a					{ dg-warning "invalid UTF-8 character <80>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } } */
-/* a�a					{ dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } } */
-/* a���a				{ dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } } */
-/* a���a				{ dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } } */
-/* a��a					{ dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } } */
-/* a��a					{ dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } } */
-/* a���a				{ dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } } */
-/* a����a				{ dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } } */
-/* a����a				{ dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } } */
-/* a����a				{ dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } } */
-/* a������a				{ dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } } */
-/*					{ dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } } */
+/* a�a					{ dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } } */
+/* a���a				{ dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } } */
+/* a���a				{ dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } } */
+/* a��a					{ dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } } */
+/* a��a					{ dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } } */
+/* a���a				{ dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } } */
+/* a����a				{ dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } } */
+/* a����a				{ dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } } */
+/* a����a				{ dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } } */
+/* a������a				{ dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } } */
+/*					{ dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 } */
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-3.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-3.C	2024-09-13 10:29:41.583993908 +0200
@@ -4,40 +4,40 @@ 
 // { dg-options "-finput-charset=UTF-8 -pedantic-errors" }
 
 // a€߿ࠀ퟿𐀀􏿿a		{ dg-bogus "invalid UTF-8 character" }
-// a�a					{ dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
-// a�a					{ dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
-// a�a					{ dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
-// a�a					{ dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
-// a�a					{ dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
-// a�a					{ dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
-// a�a					{ dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
-// a�a					{ dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
-// a���a				{ dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-// a���a				{ dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-// a��a					{ dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-// a��a					{ dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-// a���a				{ dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-// a����a				{ dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-// a����a				{ dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-// a����a				{ dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-// a������a				{ dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-//					{ dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+// a�a					{ dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
+// a�a					{ dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+// a�a					{ dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+// a�a					{ dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+// a�a					{ dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+// a�a					{ dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+// a�a					{ dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+// a�a					{ dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+// a���a				{ dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+// a���a				{ dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+// a��a					{ dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+// a��a					{ dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+// a���a				{ dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+// a����a				{ dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+// a����a				{ dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+// a����a				{ dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+// a������a				{ dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+//					{ dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 /* a€߿ࠀ퟿𐀀􏿿a		{ dg-bogus "invalid UTF-8 character" } */
-/* a�a					{ dg-error "invalid UTF-8 character <80>" "" { target c++23 } } */
-/* a�a					{ dg-error "invalid UTF-8 character <bf>" "" { target c++23 } } */
-/* a�a					{ dg-error "invalid UTF-8 character <c0>" "" { target c++23 } } */
-/* a�a					{ dg-error "invalid UTF-8 character <c1>" "" { target c++23 } } */
-/* a�a					{ dg-error "invalid UTF-8 character <f5>" "" { target c++23 } } */
-/* a�a					{ dg-error "invalid UTF-8 character <ff>" "" { target c++23 } } */
-/* a�a					{ dg-error "invalid UTF-8 character <c2>" "" { target c++23 } } */
-/* a�a					{ dg-error "invalid UTF-8 character <e0>" "" { target c++23 } } */
-/* a���a				{ dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } } */
-/* a���a				{ dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } } */
-/* a��a					{ dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } } */
-/* a��a					{ dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } } */
-/* a���a				{ dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } } */
-/* a����a				{ dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } } */
-/* a����a				{ dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } } */
-/* a����a				{ dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } } */
-/* a������a				{ dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } } */
-/*					{ dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 } */
+/* a�a					{ dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } } */
+/* a�a					{ dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } } */
+/* a�a					{ dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } } */
+/* a�a					{ dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } } */
+/* a�a					{ dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } } */
+/* a�a					{ dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } } */
+/* a�a					{ dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } } */
+/* a�a					{ dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } } */
+/* a���a				{ dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } } */
+/* a���a				{ dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } } */
+/* a��a					{ dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } } */
+/* a��a					{ dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } } */
+/* a���a				{ dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } } */
+/* a����a				{ dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } } */
+/* a����a				{ dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } } */
+/* a����a				{ dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } } */
+/* a������a				{ dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } } */
+/*					{ dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 } */
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-4.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-4.C	2024-09-13 10:29:57.796770184 +0200
@@ -4,40 +4,40 @@ 
 // { dg-options "-finput-charset=UTF-8 -pedantic-errors -Wno-invalid-utf8" }
 
 // a€߿ࠀ퟿𐀀􏿿a		{ dg-bogus "invalid UTF-8 character" }
-// a�a					{ dg-bogus "invalid UTF-8 character <80>" }
-// a�a					{ dg-bogus "invalid UTF-8 character <bf>" }
-// a�a					{ dg-bogus "invalid UTF-8 character <c0>" }
-// a�a					{ dg-bogus "invalid UTF-8 character <c1>" }
-// a�a					{ dg-bogus "invalid UTF-8 character <f5>" }
-// a�a					{ dg-bogus "invalid UTF-8 character <ff>" }
-// a�a					{ dg-bogus "invalid UTF-8 character <c2>" }
-// a�a					{ dg-bogus "invalid UTF-8 character <e0>" }
-// a���a				{ dg-bogus "invalid UTF-8 character <e0><80><bf>" }
-// a���a				{ dg-bogus "invalid UTF-8 character <e0><9f><80>" }
-// a��a					{ dg-bogus "invalid UTF-8 character <e0><bf>" }
-// a��a					{ dg-bogus "invalid UTF-8 character <ec><80>" }
-// a���a				{ dg-bogus "invalid UTF-8 character <ed><a0><80>" }
-// a����a				{ dg-bogus "invalid UTF-8 character <f0><80><80><80>" }
-// a����a				{ dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" }
-// a����a				{ dg-bogus "invalid UTF-8 character <f4><90><80><80>" }
-// a������a				{ dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" }
-//					{ dg-bogus "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
+// a�a					{ dg-bogus "invalid UTF-8 character '<80>'" }
+// a�a					{ dg-bogus "invalid UTF-8 character '<bf>'" }
+// a�a					{ dg-bogus "invalid UTF-8 character '<c0>'" }
+// a�a					{ dg-bogus "invalid UTF-8 character '<c1>'" }
+// a�a					{ dg-bogus "invalid UTF-8 character '<f5>'" }
+// a�a					{ dg-bogus "invalid UTF-8 character '<ff>'" }
+// a�a					{ dg-bogus "invalid UTF-8 character '<c2>'" }
+// a�a					{ dg-bogus "invalid UTF-8 character '<e0>'" }
+// a���a				{ dg-bogus "invalid UTF-8 character '<e0><80><bf>'" }
+// a���a				{ dg-bogus "invalid UTF-8 character '<e0><9f><80>'" }
+// a��a					{ dg-bogus "invalid UTF-8 character '<e0><bf>'" }
+// a��a					{ dg-bogus "invalid UTF-8 character '<ec><80>'" }
+// a���a				{ dg-bogus "invalid UTF-8 character '<ed><a0><80>'" }
+// a����a				{ dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" }
+// a����a				{ dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" }
+// a����a				{ dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" }
+// a������a				{ dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" }
+//					{ dg-bogus "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 }
 /* a€߿ࠀ퟿𐀀􏿿a		{ dg-bogus "invalid UTF-8 character" } */
-/* a�a					{ dg-bogus "invalid UTF-8 character <80>" } */
-/* a�a					{ dg-bogus "invalid UTF-8 character <bf>" } */
-/* a�a					{ dg-bogus "invalid UTF-8 character <c0>" } */
-/* a�a					{ dg-bogus "invalid UTF-8 character <c1>" } */
-/* a�a					{ dg-bogus "invalid UTF-8 character <f5>" } */
-/* a�a					{ dg-bogus "invalid UTF-8 character <ff>" } */
-/* a�a					{ dg-bogus "invalid UTF-8 character <c2>" } */
-/* a�a					{ dg-bogus "invalid UTF-8 character <e0>" } */
-/* a���a				{ dg-bogus "invalid UTF-8 character <e0><80><bf>" } */
-/* a���a				{ dg-bogus "invalid UTF-8 character <e0><9f><80>" } */
-/* a��a					{ dg-bogus "invalid UTF-8 character <e0><bf>" } */
-/* a��a					{ dg-bogus "invalid UTF-8 character <ec><80>" } */
-/* a���a				{ dg-bogus "invalid UTF-8 character <ed><a0><80>" } */
-/* a����a				{ dg-bogus "invalid UTF-8 character <f0><80><80><80>" } */
-/* a����a				{ dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" } */
-/* a����a				{ dg-bogus "invalid UTF-8 character <f4><90><80><80>" } */
-/* a������a				{ dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" } */
-/*					{ dg-bogus "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 } */
+/* a�a					{ dg-bogus "invalid UTF-8 character '<80>'" } */
+/* a�a					{ dg-bogus "invalid UTF-8 character '<bf>'" } */
+/* a�a					{ dg-bogus "invalid UTF-8 character '<c0>'" } */
+/* a�a					{ dg-bogus "invalid UTF-8 character '<c1>'" } */
+/* a�a					{ dg-bogus "invalid UTF-8 character '<f5>'" } */
+/* a�a					{ dg-bogus "invalid UTF-8 character '<ff>'" } */
+/* a�a					{ dg-bogus "invalid UTF-8 character '<c2>'" } */
+/* a�a					{ dg-bogus "invalid UTF-8 character '<e0>'" } */
+/* a���a				{ dg-bogus "invalid UTF-8 character '<e0><80><bf>'" } */
+/* a���a				{ dg-bogus "invalid UTF-8 character '<e0><9f><80>'" } */
+/* a��a					{ dg-bogus "invalid UTF-8 character '<e0><bf>'" } */
+/* a��a					{ dg-bogus "invalid UTF-8 character '<ec><80>'" } */
+/* a���a				{ dg-bogus "invalid UTF-8 character '<ed><a0><80>'" } */
+/* a����a				{ dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" } */
+/* a����a				{ dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" } */
+/* a����a				{ dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" } */
+/* a������a				{ dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" } */
+/*					{ dg-bogus "invalid UTF-8 character '<bf>'" "" { target *-*-* } .-1 } */
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-5.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-5.C	2024-09-13 10:30:15.259529205 +0200
@@ -3,78 +3,78 @@ 
 // { dg-do preprocess { target c++11 } }
 // { dg-options "-finput-charset=UTF-8" }
 
-char32_t a = U'�';				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-char32_t b = U'�';				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-char32_t c = U'�';				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-char32_t d = U'�';				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-char32_t e = U'�';				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-char32_t f = U'�';				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-char32_t g = U'�';				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-char32_t h = U'�';				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-char32_t i = U'���';				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-char32_t j = U'���';				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-char32_t k = U'��';				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-char32_t l = U'��';				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-char32_t m = U'���';				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-char32_t n = U'����';				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-char32_t o = U'����';				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-char32_t p = U'����';				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-char32_t q = U'������';				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+char32_t a = U'�';				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+char32_t b = U'�';				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+char32_t c = U'�';				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+char32_t d = U'�';				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+char32_t e = U'�';				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+char32_t f = U'�';				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+char32_t g = U'�';				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+char32_t h = U'�';				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+char32_t i = U'���';				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+char32_t j = U'���';				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+char32_t k = U'��';				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+char32_t l = U'��';				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+char32_t m = U'���';				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+char32_t n = U'����';				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+char32_t o = U'����';				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+char32_t p = U'����';				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+char32_t q = U'������';				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A = U"€߿ࠀ퟿𐀀􏿿";		// { dg-bogus "invalid UTF-8 character" }
-auto B = U"�";					// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C = U"�";					// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D = U"�";					// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E = U"�";					// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F = U"�";					// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G = U"�";					// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H = U"�";					// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I = U"�";					// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J = U"���";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K = U"���";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L = U"��";					// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M = U"��";					// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N = U"���";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O = U"����";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P = U"����";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q = U"����";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R = U"������";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B = U"�";					// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C = U"�";					// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D = U"�";					// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E = U"�";					// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F = U"�";					// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G = U"�";					// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H = U"�";					// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I = U"�";					// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J = U"���";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K = U"���";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L = U"��";					// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M = U"��";					// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N = U"���";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O = U"����";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P = U"����";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q = U"����";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R = U"������";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A1 = UR"(€߿ࠀ퟿𐀀􏿿)";		// { dg-bogus "invalid UTF-8 character" }
-auto B1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L1 = UR"(��)";				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M1 = UR"(��)";				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R1 = UR"(������)";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L1 = UR"(��)";				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M1 = UR"(��)";				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R1 = UR"(������)";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A2 = u8"€߿ࠀ퟿𐀀􏿿";		// { dg-bogus "invalid UTF-8 character" }
-auto B2 = u8"�";				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C2 = u8"�";				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D2 = u8"�";				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E2 = u8"�";				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F2 = u8"�";				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G2 = u8"�";				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H2 = u8"�";				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I2 = u8"�";				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J2 = u8"���";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K2 = u8"���";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L2 = u8"��";				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M2 = u8"��";				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N2 = u8"���";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O2 = u8"����";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P2 = u8"����";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q2 = u8"����";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R2 = u8"������";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B2 = u8"�";				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C2 = u8"�";				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F2 = u8"�";				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G2 = u8"�";				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I2 = u8"�";				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J2 = u8"���";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K2 = u8"���";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L2 = u8"��";				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M2 = u8"��";				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N2 = u8"���";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R2 = u8"������";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-6.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-6.C	2024-09-13 10:30:31.747301679 +0200
@@ -3,78 +3,78 @@ 
 // { dg-do preprocess { target c++11 } }
 // { dg-options "-finput-charset=UTF-8 -pedantic" }
 
-char32_t a = U'�';				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-char32_t b = U'�';				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-char32_t c = U'�';				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-char32_t d = U'?';				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-char32_t e = U'�';				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-char32_t f = U'�';				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-char32_t g = U'�';				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-char32_t h = U'�';				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-char32_t i = U'���';				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-char32_t j = U'���';				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-char32_t k = U'��';				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-char32_t l = U'��';				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-char32_t m = U'���';				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-char32_t n = U'����';				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-char32_t o = U'����';				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-char32_t p = U'����';				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-char32_t q = U'������';				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+char32_t a = U'�';				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+char32_t b = U'�';				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+char32_t c = U'�';				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+char32_t d = U'�';				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+char32_t e = U'�';				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+char32_t f = U'�';				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+char32_t g = U'�';				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+char32_t h = U'�';				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+char32_t i = U'���';				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+char32_t j = U'���';				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+char32_t k = U'��';				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+char32_t l = U'��';				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+char32_t m = U'���';				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+char32_t n = U'����';				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+char32_t o = U'����';				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+char32_t p = U'����';				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+char32_t q = U'������';				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A = U"€߿ࠀ퟿𐀀􏿿";		// { dg-bogus "invalid UTF-8 character" }
-auto B = U"�";					// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C = U"�";					// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D = U"�";					// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E = U"�";					// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F = U"�";					// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G = U"�";					// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H = U"�";					// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I = U"�";					// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J = U"���";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K = U"���";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L = U"��";					// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M = U"��";					// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N = U"���";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O = U"����";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P = U"����";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q = U"����";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R = U"������";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B = U"�";					// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C = U"�";					// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D = U"�";					// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E = U"�";					// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F = U"�";					// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G = U"�";					// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H = U"�";					// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I = U"�";					// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J = U"���";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K = U"���";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L = U"��";					// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M = U"��";					// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N = U"���";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O = U"����";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P = U"����";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q = U"����";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R = U"������";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A1 = UR"(€߿ࠀ퟿𐀀􏿿)";		// { dg-bogus "invalid UTF-8 character" }
-auto B1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I1 = UR"(�)";				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L1 = UR"(��)";				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M1 = UR"(��)";				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N1 = UR"(���)";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q1 = UR"(����)";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R1 = UR"(������)";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I1 = UR"(�)";				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L1 = UR"(��)";				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M1 = UR"(��)";				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N1 = UR"(���)";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q1 = UR"(����)";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R1 = UR"(������)";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A2 = u8"€߿ࠀ퟿𐀀􏿿";		// { dg-bogus "invalid UTF-8 character" }
-auto B2 = u8"�";				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C2 = u8"�";				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D2 = u8"�";				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E2 = u8"�";				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F2 = u8"�";				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G2 = u8"�";				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H2 = u8"�";				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I2 = u8"�";				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J2 = u8"���";				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K2 = u8"���";				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L2 = u8"��";				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M2 = u8"��";				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N2 = u8"���";				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O2 = u8"����";				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P2 = u8"����";				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q2 = u8"����";				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R2 = u8"������";				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B2 = u8"�";				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C2 = u8"�";				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F2 = u8"�";				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G2 = u8"�";				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H2 = u8"�";				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I2 = u8"�";				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J2 = u8"���";				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K2 = u8"���";				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L2 = u8"��";				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M2 = u8"��";				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N2 = u8"���";				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q2 = u8"����";				// { dg-warning "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R2 = u8"������";				// { dg-warning "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-7.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-7.C	2024-09-13 10:30:46.597096759 +0200
@@ -3,78 +3,78 @@ 
 // { dg-do preprocess { target c++11 } }
 // { dg-options "-finput-charset=UTF-8 -pedantic-errors" }
 
-char32_t a = U'�';				// { dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
-char32_t b = U'�';				// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
-char32_t c = U'�';				// { dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
-char32_t d = U'�';				// { dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
-char32_t e = U'�';				// { dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
-char32_t f = U'�';				// { dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
-char32_t g = U'�';				// { dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
-char32_t h = U'�';				// { dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
-char32_t i = U'���';				// { dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-char32_t j = U'���';				// { dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-char32_t k = U'��';				// { dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-char32_t l = U'��';				// { dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-char32_t m = U'�??';				// { dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-char32_t n = U'����';				// { dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-char32_t o = U'����';				// { dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-char32_t p = U'����';				// { dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-char32_t q = U'������';				// { dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+char32_t a = U'�';				// { dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
+char32_t b = U'�';				// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+char32_t c = U'�';				// { dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+char32_t d = U'�';				// { dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+char32_t e = U'�';				// { dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+char32_t f = U'�';				// { dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+char32_t g = U'�';				// { dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+char32_t h = U'�';				// { dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+char32_t i = U'���';				// { dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+char32_t j = U'���';				// { dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+char32_t k = U'�?';				// { dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+char32_t l = U'��';				// { dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+char32_t m = U'���';				// { dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+char32_t n = U'����';				// { dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+char32_t o = U'����';				// { dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+char32_t p = U'����';				// { dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+char32_t q = U'������';				// { dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A = U"€߿ࠀ퟿𐀀􏿿";		// { dg-bogus "invalid UTF-8 character" }
-auto B = U"�";					// { dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C = U"�";					// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D = U"�";					// { dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E = U"�";					// { dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F = U"�";					// { dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G = U"�";					// { dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H = U"�";					// { dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I = U"�";					// { dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J = U"���";				// { dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K = U"���";				// { dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L = U"��";					// { dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M = U"��";					// { dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N = U"���";				// { dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O = U"����";				// { dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P = U"����";				// { dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q = U"����";				// { dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R = U"������";				// { dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B = U"�";					// { dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C = U"�";					// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D = U"�";					// { dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E = U"�";					// { dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F = U"�";					// { dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G = U"�";					// { dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H = U"�";					// { dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I = U"�";					// { dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J = U"���";				// { dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K = U"���";				// { dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L = U"��";					// { dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M = U"��";					// { dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N = U"���";				// { dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O = U"����";				// { dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P = U"����";				// { dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q = U"����";				// { dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R = U"������";				// { dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A1 = UR"(€߿ࠀ퟿𐀀􏿿)";		// { dg-bogus "invalid UTF-8 character" }
-auto B1 = UR"(�)";				// { dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C1 = UR"(�)";				// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D1 = UR"(�)";				// { dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E1 = UR"(�)";				// { dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F1 = UR"(�)";				// { dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G1 = UR"(�)";				// { dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H1 = UR"(�)";				// { dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I1 = UR"(�)";				// { dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J1 = UR"(���)";				// { dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K1 = UR"(���)";				// { dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L1 = UR"(��)";				// { dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M1 = UR"(��)";				// { dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N1 = UR"(���)";				// { dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O1 = UR"(����)";				// { dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P1 = UR"(����)";				// { dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q1 = UR"(����)";				// { dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R1 = UR"(������)";				// { dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I1 = UR"(�)";				// { dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J1 = UR"(���)";				// { dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K1 = UR"(���)";				// { dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L1 = UR"(��)";				// { dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M1 = UR"(��)";				// { dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N1 = UR"(���)";				// { dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O1 = UR"(����)";				// { dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P1 = UR"(����)";				// { dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q1 = UR"(����)";				// { dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R1 = UR"(������)";				// { dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A2 = u8"€߿ࠀ퟿𐀀􏿿";		// { dg-bogus "invalid UTF-8 character" }
-auto B2 = u8"�";				// { dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C2 = u8"�";				// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D2 = u8"�";				// { dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E2 = u8"�";				// { dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F2 = u8"�";				// { dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G2 = u8"�";				// { dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H2 = u8"�";				// { dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I2 = u8"�";				// { dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J2 = u8"���";				// { dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K2 = u8"���";				// { dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L2 = u8"��";				// { dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M2 = u8"��";				// { dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N2 = u8"���";				// { dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O2 = u8"����";				// { dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P2 = u8"����";				// { dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q2 = u8"����";				// { dg-error "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R2 = u8"������";				// { dg-error "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B2 = u8"�";				// { dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C2 = u8"�";				// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D2 = u8"�";				// { dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E2 = u8"�";				// { dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F2 = u8"�";				// { dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G2 = u8"�";				// { dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H2 = u8"�";				// { dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I2 = u8"�";				// { dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J2 = u8"���";				// { dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K2 = u8"���";				// { dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L2 = u8"��";				// { dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M2 = u8"��";				// { dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N2 = u8"���";				// { dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O2 = u8"����";				// { dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P2 = u8"����";				// { dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q2 = u8"����";				// { dg-error "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R2 = u8"������";				// { dg-error "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-8.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-8.C	2024-09-13 10:31:04.698846968 +0200
@@ -3,78 +3,78 @@ 
 // { dg-do preprocess { target c++11 } }
 // { dg-options "-finput-charset=UTF-8 -pedantic-errors -Wno-invalid-utf8" }
 
-char32_t a = U'�';				// { dg-bogus "invalid UTF-8 character <80>" "" { target c++23 } }
-char32_t b = U'�';				// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } }
-char32_t c = U'�';				// { dg-bogus "invalid UTF-8 character <c0>" "" { target c++23 } }
-char32_t d = U'�';				// { dg-bogus "invalid UTF-8 character <c1>" "" { target c++23 } }
-char32_t e = U'�';				// { dg-bogus "invalid UTF-8 character <f5>" "" { target c++23 } }
-char32_t f = U'�';				// { dg-bogus "invalid UTF-8 character <ff>" "" { target c++23 } }
-char32_t g = U'�';				// { dg-bogus "invalid UTF-8 character <c2>" "" { target c++23 } }
-char32_t h = U'�';				// { dg-bogus "invalid UTF-8 character <e0>" "" { target c++23 } }
-char32_t i = U'���';				// { dg-bogus "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-char32_t j = U'���';				// { dg-bogus "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-char32_t k = U'��';				// { dg-bogus "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-char32_t l = U'��';				// { dg-bogus "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-char32_t m = U'���';				// { dg-bogus "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-char32_t n = U'����';				// { dg-bogus "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-char32_t o = U'����';				// { dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-char32_t p = U'����';				// { dg-bogus "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-char32_t q = U'������';				// { dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+char32_t a = U'�';				// { dg-bogus "invalid UTF-8 character '<80>'" "" { target c++23 } }
+char32_t b = U'�';				// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+char32_t c = U'�';				// { dg-bogus "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+char32_t d = U'�';				// { dg-bogus "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+char32_t e = U'�';				// { dg-bogus "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+char32_t f = U'�';				// { dg-bogus "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+char32_t g = U'�';				// { dg-bogus "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+char32_t h = U'�';				// { dg-bogus "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+char32_t i = U'���';				// { dg-bogus "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+char32_t j = U'���';				// { dg-bogus "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+char32_t k = U'��';				// { dg-bogus "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+char32_t l = U'��';				// { dg-bogus "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+char32_t m = U'���';				// { dg-bogus "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+char32_t n = U'����';				// { dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+char32_t o = U'����';				// { dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+char32_t p = U'����';				// { dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+char32_t q = U'������';				// { dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A = U"€߿ࠀ퟿𐀀􏿿";		// { dg-bogus "invalid UTF-8 character" }
-auto B = U"�";					// { dg-bogus "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C = U"�";					// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D = U"�";					// { dg-bogus "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E = U"�";					// { dg-bogus "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F = U"�";					// { dg-bogus "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G = U"�";					// { dg-bogus "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H = U"�";					// { dg-bogus "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I = U"�";					// { dg-bogus "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J = U"���";				// { dg-bogus "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K = U"���";				// { dg-bogus "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L = U"��";					// { dg-bogus "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M = U"��";					// { dg-bogus "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N = U"���";				// { dg-bogus "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O = U"����";				// { dg-bogus "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P = U"����";				// { dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q = U"����";				// { dg-bogus "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R = U"������";				// { dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B = U"�";					// { dg-bogus "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C = U"�";					// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D = U"�";					// { dg-bogus "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E = U"�";					// { dg-bogus "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F = U"�";					// { dg-bogus "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G = U"�";					// { dg-bogus "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H = U"�";					// { dg-bogus "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I = U"�";					// { dg-bogus "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J = U"���";				// { dg-bogus "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K = U"���";				// { dg-bogus "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L = U"��";					// { dg-bogus "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M = U"��";					// { dg-bogus "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N = U"���";				// { dg-bogus "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O = U"����";				// { dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P = U"����";				// { dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q = U"����";				// { dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R = U"������";				// { dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A1 = UR"(€߿ࠀ퟿𐀀􏿿)";		// { dg-bogus "invalid UTF-8 character" }
-auto B1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L1 = UR"(��)";				// { dg-bogus "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M1 = UR"(��)";				// { dg-bogus "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R1 = UR"(������)";				// { dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I1 = UR"(�)";				// { dg-bogus "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L1 = UR"(��)";				// { dg-bogus "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M1 = UR"(��)";				// { dg-bogus "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N1 = UR"(���)";				// { dg-bogus "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q1 = UR"(����)";				// { dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R1 = UR"(������)";				// { dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
 auto A2 = u8"€߿ࠀ퟿𐀀􏿿";		// { dg-bogus "invalid UTF-8 character" }
-auto B2 = u8"�";				// { dg-bogus "invalid UTF-8 character <80>" "" { target c++23 } }
-auto C2 = u8"�";				// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } }
-auto D2 = u8"�";				// { dg-bogus "invalid UTF-8 character <c0>" "" { target c++23 } }
-auto E2 = u8"�";				// { dg-bogus "invalid UTF-8 character <c1>" "" { target c++23 } }
-auto F2 = u8"�";				// { dg-bogus "invalid UTF-8 character <f5>" "" { target c++23 } }
-auto G2 = u8"�";				// { dg-bogus "invalid UTF-8 character <ff>" "" { target c++23 } }
-auto H2 = u8"�";				// { dg-bogus "invalid UTF-8 character <c2>" "" { target c++23 } }
-auto I2 = u8"�";				// { dg-bogus "invalid UTF-8 character <e0>" "" { target c++23 } }
-auto J2 = u8"���";				// { dg-bogus "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-auto K2 = u8"���";				// { dg-bogus "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-auto L2 = u8"��";				// { dg-bogus "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-auto M2 = u8"��";				// { dg-bogus "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-auto N2 = u8"���";				// { dg-bogus "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-auto O2 = u8"����";				// { dg-bogus "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-auto P2 = u8"����";				// { dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
-auto Q2 = u8"����";				// { dg-bogus "invalid UTF-8 character <f4><90><80><80>" "" { target c++23 } }
-auto R2 = u8"������";				// { dg-bogus "invalid UTF-8 character <fd><bf><bf><bf>" "" { target c++23 } }
-						// { dg-bogus "invalid UTF-8 character <bf>" "" { target c++23 } .-1 }
+auto B2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<80>'" "" { target c++23 } }
+auto C2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+auto D2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+auto E2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+auto F2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+auto G2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+auto H2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+auto I2 = u8"�";				// { dg-bogus "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+auto J2 = u8"���";				// { dg-bogus "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+auto K2 = u8"���";				// { dg-bogus "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+auto L2 = u8"��";				// { dg-bogus "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+auto M2 = u8"��";				// { dg-bogus "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+auto N2 = u8"���";				// { dg-bogus "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+auto O2 = u8"����";				// { dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+auto P2 = u8"����";				// { dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
+auto Q2 = u8"����";				// { dg-bogus "invalid UTF-8 character '<f4><90><80><80>'" "" { target c++23 } }
+auto R2 = u8"������";				// { dg-bogus "invalid UTF-8 character '<fd><bf><bf><bf>'" "" { target c++23 } }
+						// { dg-bogus "invalid UTF-8 character '<bf>'" "" { target c++23 } .-1 }
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-9.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-9.C	2024-09-13 10:31:20.573627902 +0200
@@ -6,20 +6,20 @@ 
 #define I(x)
 I(€߿ࠀ퟿𐀀􏿿)	// { dg-bogus "invalid UTF-8 character" }
                                 // { dg-error "is not valid in an identifier" "" { target *-*-* } .-1 }
-I(�)				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-I(���)				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-I(���)				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-I(��)				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-I(��)				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-I(���)				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-I(����)				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-I(����)				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+I(���)				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+I(���)				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+I(��)				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+I(��)				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+I(���)				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+I(����)				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+I(����)				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
 I(����)				// { dg-error "is not valid in an identifier" }
 I(������)			// { dg-error "is not valid in an identifier" }
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-10.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-10.C	2024-09-13 10:31:41.081344907 +0200
@@ -6,20 +6,20 @@ 
 #define I(x)
 I(€߿ࠀ퟿𐀀􏿿)	// { dg-bogus "invalid UTF-8 character" }
                                 // { dg-error "is not valid in an identifier" "" { target *-*-* } .-1 }
-I(�)				// { dg-warning "invalid UTF-8 character <80>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <bf>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <c0>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <c1>" "" { target c++23 } }
-I(?)				// { dg-warning "invalid UTF-8 character <f5>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <ff>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <c2>" "" { target c++23 } }
-I(�)				// { dg-warning "invalid UTF-8 character <e0>" "" { target c++23 } }
-I(���)				// { dg-warning "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-I(���)				// { dg-warning "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-I(��)				// { dg-warning "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-I(��)				// { dg-warning "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-I(���)				// { dg-warning "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-I(����)				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-I(����)				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<80>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+I(�)				// { dg-warning "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+I(���)				// { dg-warning "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+I(���)				// { dg-warning "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+I(��)				// { dg-warning "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+I(��)				// { dg-warning "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+I(���)				// { dg-warning "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+I(����)				// { dg-warning "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+I(����)				// { dg-warning "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
 I(����)				// { dg-error "is not valid in an identifier" }
 I(������)			// { dg-error "is not valid in an identifier" }
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-11.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-11.C	2024-09-13 10:31:55.809141675 +0200
@@ -6,20 +6,20 @@ 
 #define I(x)
 I(€߿ࠀ퟿𐀀􏿿)	// { dg-bogus "invalid UTF-8 character" }
                                 // { dg-error "is not valid in an identifier" "" { target *-*-* } .-1 }
-I(�)				// { dg-error "invalid UTF-8 character <80>" "" { target c++23 } }
-I(�)				// { dg-error "invalid UTF-8 character <bf>" "" { target c++23 } }
-I(�)				// { dg-error "invalid UTF-8 character <c0>" "" { target c++23 } }
-I(�)				// { dg-error "invalid UTF-8 character <c1>" "" { target c++23 } }
-I(�)				// { dg-error "invalid UTF-8 character <f5>" "" { target c++23 } }
-I(�)				// { dg-error "invalid UTF-8 character <ff>" "" { target c++23 } }
-I(�)				// { dg-error "invalid UTF-8 character <c2>" "" { target c++23 } }
-I(�)				// { dg-error "invalid UTF-8 character <e0>" "" { target c++23 } }
-I(���)				// { dg-error "invalid UTF-8 character <e0><80><bf>" "" { target c++23 } }
-I(���)				// { dg-error "invalid UTF-8 character <e0><9f><80>" "" { target c++23 } }
-I(��)				// { dg-error "invalid UTF-8 character <e0><bf>" "" { target c++23 } }
-I(��)				// { dg-error "invalid UTF-8 character <ec><80>" "" { target c++23 } }
-I(���)				// { dg-error "invalid UTF-8 character <ed><a0><80>" "" { target c++23 } }
-I(����)				// { dg-error "invalid UTF-8 character <f0><80><80><80>" "" { target c++23 } }
-I(����)				// { dg-error "invalid UTF-8 character <f0><8f><bf><bf>" "" { target c++23 } }
+I(�)				// { dg-error "invalid UTF-8 character '<80>'" "" { target c++23 } }
+I(�)				// { dg-error "invalid UTF-8 character '<bf>'" "" { target c++23 } }
+I(�)				// { dg-error "invalid UTF-8 character '<c0>'" "" { target c++23 } }
+I(�)				// { dg-error "invalid UTF-8 character '<c1>'" "" { target c++23 } }
+I(�)				// { dg-error "invalid UTF-8 character '<f5>'" "" { target c++23 } }
+I(�)				// { dg-error "invalid UTF-8 character '<ff>'" "" { target c++23 } }
+I(�)				// { dg-error "invalid UTF-8 character '<c2>'" "" { target c++23 } }
+I(�)				// { dg-error "invalid UTF-8 character '<e0>'" "" { target c++23 } }
+I(���)				// { dg-error "invalid UTF-8 character '<e0><80><bf>'" "" { target c++23 } }
+I(���)				// { dg-error "invalid UTF-8 character '<e0><9f><80>'" "" { target c++23 } }
+I(��)				// { dg-error "invalid UTF-8 character '<e0><bf>'" "" { target c++23 } }
+I(��)				// { dg-error "invalid UTF-8 character '<ec><80>'" "" { target c++23 } }
+I(���)				// { dg-error "invalid UTF-8 character '<ed><a0><80>'" "" { target c++23 } }
+I(����)				// { dg-error "invalid UTF-8 character '<f0><80><80><80>'" "" { target c++23 } }
+I(����)				// { dg-error "invalid UTF-8 character '<f0><8f><bf><bf>'" "" { target c++23 } }
 I(����)				// { dg-error "is not valid in an identifier" }
 I(������)			// { dg-error "is not valid in an identifier" }
--- gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-12.C.jj	2022-09-02 23:05:41.240223960 +0200
+++ gcc/testsuite/g++.dg/cpp23/Winvalid-utf8-12.C	2024-09-13 10:32:13.942891436 +0200
@@ -6,20 +6,20 @@ 
 #define I(x)
 I(€߿ࠀ퟿𐀀􏿿)	// { dg-bogus "invalid UTF-8 character" }
                                 // { dg-error "is not valid in an identifier" "" { target *-*-* } .-1 }
-I(�)				// { dg-bogus "invalid UTF-8 character <80>" }
-I(�)				// { dg-bogus "invalid UTF-8 character <bf>" }
-I(�)				// { dg-bogus "invalid UTF-8 character <c0>" }
-I(�)				// { dg-bogus "invalid UTF-8 character <c1>" }
-I(�)				// { dg-bogus "invalid UTF-8 character <f5>" }
-I(�)				// { dg-bogus "invalid UTF-8 character <ff>" }
-I(�)				// { dg-bogus "invalid UTF-8 character <c2>" }
-I(�)				// { dg-bogus "invalid UTF-8 character <e0>" }
-I(���)				// { dg-bogus "invalid UTF-8 character <e0><80><bf>" }
-I(���)				// { dg-bogus "invalid UTF-8 character <e0><9f><80>" }
-I(��)				// { dg-bogus "invalid UTF-8 character <e0><bf>" }
-I(��)				// { dg-bogus "invalid UTF-8 character <ec><80>" }
-I(���)				// { dg-bogus "invalid UTF-8 character <ed><a0><80>" }
-I(����)				// { dg-bogus "invalid UTF-8 character <f0><80><80><80>" }
-I(����)				// { dg-bogus "invalid UTF-8 character <f0><8f><bf><bf>" }
+I(�)				// { dg-bogus "invalid UTF-8 character '<80>" }
+I(�)				// { dg-bogus "invalid UTF-8 character '<bf>'" }
+I(�)				// { dg-bogus "invalid UTF-8 character '<c0>'" }
+I(�)				// { dg-bogus "invalid UTF-8 character '<c1>'" }
+I(�)				// { dg-bogus "invalid UTF-8 character '<f5>'" }
+I(�)				// { dg-bogus "invalid UTF-8 character '<ff>'" }
+I(�)				// { dg-bogus "invalid UTF-8 character '<c2>'" }
+I(�)				// { dg-bogus "invalid UTF-8 character '<e0>'" }
+I(���)				// { dg-bogus "invalid UTF-8 character '<e0><80><bf>'" }
+I(���)				// { dg-bogus "invalid UTF-8 character '<e0><9f><80>'" }
+I(��)				// { dg-bogus "invalid UTF-8 character '<e0><bf>'" }
+I(��)				// { dg-bogus "invalid UTF-8 character '<ec><80>'" }
+I(���)				// { dg-bogus "invalid UTF-8 character '<ed><a0><80>'" }
+I(����)				// { dg-bogus "invalid UTF-8 character '<f0><80><80><80>'" }
+I(����)				// { dg-bogus "invalid UTF-8 character '<f0><8f><bf><bf>'" }
 I(����)				// { dg-error "is not valid in an identifier" }
 I(������)			// { dg-error "is not valid in an identifier" }
--- gcc/testsuite/g++.dg/cpp/elifdef-3.C.jj	2021-10-07 23:03:44.116934656 +0200
+++ gcc/testsuite/g++.dg/cpp/elifdef-3.C	2024-09-13 10:34:16.755196685 +0200
@@ -4,53 +4,53 @@ 
 #define A
 #undef B
 
-#elifdef A // { dg-error "#elifdef without #if" }
-#elifdef B // { dg-error "#elifdef without #if" }
-#elifndef A // { dg-error "#elifndef without #if" }
-#elifndef B // { dg-error "#elifndef without #if" }
+#elifdef A // { dg-error "'#elifdef' without '#if'" }
+#elifdef B // { dg-error "'#elifdef' without '#if'" }
+#elifndef A // { dg-error "'#elifndef' without '#if'" }
+#elifndef B // { dg-error "'#elifndef' without '#if'" }
 
 #if 1 // { dg-error "-:began here" }
 #else
-#elifdef A // { dg-error "#elifdef after #else" }
+#elifdef A // { dg-error "'#elifdef' after '#else'" }
 #endif
 
 #if 1 // { dg-error "-:began here" }
 #else
-#elifdef B // { dg-error "#elifdef after #else" }
+#elifdef B // { dg-error "'#elifdef' after '#else'" }
 #endif
 
 #if 1 // { dg-error "-:began here" }
 #else
-#elifndef A // { dg-error "#elifndef after #else" }
+#elifndef A // { dg-error "'#elifndef' after '#else'" }
 #endif
 
 #if 1 // { dg-error "-:began here" }
 #else
-#elifndef B // { dg-error "#elifndef after #else" }
+#elifndef B // { dg-error "'#elifndef' after '#else'" }
 #endif
 
 #if 0
-#elifdef A = // { dg-error "extra tokens at end of #elifdef directive" }
+#elifdef A = // { dg-error "extra tokens at end of '#elifdef' directive" }
 #endif
 
 #if 0
-#elifdef B = // { dg-error "extra tokens at end of #elifdef directive" }
+#elifdef B = // { dg-error "extra tokens at end of '#elifdef' directive" }
 #endif
 
 #if 0
-#elifndef A = // { dg-error "extra tokens at end of #elifndef directive" }
+#elifndef A = // { dg-error "extra tokens at end of '#elifndef' directive" }
 #endif
 
 #if 0
-#elifndef B = // { dg-error "extra tokens at end of #elifndef directive" }
+#elifndef B = // { dg-error "extra tokens at end of '#elifndef' directive" }
 #endif
 
 #if 0
-#elifdef // { dg-error "no macro name given in #elifdef directive" }
+#elifdef // { dg-error "no macro name given in '#elifdef' directive" }
 #endif
 
 #if 0
-#elifndef // { dg-error "no macro name given in #elifndef directive" }
+#elifndef // { dg-error "no macro name given in '#elifndef' directive" }
 #endif
 
 #if 0
--- gcc/testsuite/g++.dg/cpp/elifdef-5.C.jj	2021-10-07 23:03:44.116934656 +0200
+++ gcc/testsuite/g++.dg/cpp/elifdef-5.C	2024-09-13 10:35:35.074115927 +0200
@@ -5,53 +5,53 @@ 
 #define A
 #undef B
 
-#elifdef A // { dg-error "#elifdef without #if" }
-#elifdef B // { dg-error "#elifdef without #if" }
-#elifndef A // { dg-error "#elifndef without #if" }
-#elifndef B // { dg-error "#elifndef without #if" }
+#elifdef A // { dg-error "'#elifdef' without '#if'" }
+#elifdef B // { dg-error "'#elifdef' without '#if'" }
+#elifndef A // { dg-error "'#elifndef' without '#if'" }
+#elifndef B // { dg-error "'#elifndef' without '#if'" }
 
 #if 1 // { dg-error "-:began here" }
 #else
-#elifdef A // { dg-error "#elifdef after #else" }
+#elifdef A // { dg-error "'#elifdef' after '#else'" }
 #endif
 
 #if 1 // { dg-error "-:began here" }
 #else
-#elifdef B // { dg-error "#elifdef after #else" }
+#elifdef B // { dg-error "'#elifdef' after '#else'" }
 #endif
 
 #if 1 // { dg-error "-:began here" }
 #else
-#elifndef A // { dg-error "#elifndef after #else" }
+#elifndef A // { dg-error "'#elifndef' after '#else'" }
 #endif
 
 #if 1 // { dg-error "-:began here" }
 #else
-#elifndef B // { dg-error "#elifndef after #else" }
+#elifndef B // { dg-error "'#elifndef' after '#else'" }
 #endif
 
 #if 0
-#elifdef A = // { dg-warning "extra tokens at end of #elifdef directive" }
+#elifdef A = // { dg-warning "extra tokens at end of '#elifdef' directive" }
 #endif
 
 #if 0
-#elifdef B = // { dg-warning "extra tokens at end of #elifdef directive" }
+#elifdef B = // { dg-warning "extra tokens at end of '#elifdef' directive" }
 #endif
 
 #if 0
-#elifndef A = // { dg-warning "extra tokens at end of #elifndef directive" }
+#elifndef A = // { dg-warning "extra tokens at end of '#elifndef' directive" }
 #endif
 
 #if 0
-#elifndef B = // { dg-warning "extra tokens at end of #elifndef directive" }
+#elifndef B = // { dg-warning "extra tokens at end of '#elifndef' directive" }
 #endif
 
 #if 0
-#elifdef // { dg-error "no macro name given in #elifdef directive" }
+#elifdef // { dg-error "no macro name given in '#elifdef' directive" }
 #endif
 
 #if 0
-#elifndef // { dg-error "no macro name given in #elifndef directive" }
+#elifndef // { dg-error "no macro name given in '#elifndef' directive" }
 #endif
 
 #if 0
--- gcc/testsuite/g++.dg/cpp/elifdef-6.C.jj	2021-10-07 23:03:44.116934656 +0200
+++ gcc/testsuite/g++.dg/cpp/elifdef-6.C	2024-09-13 10:36:34.664293616 +0200
@@ -6,7 +6,7 @@ 
 #undef B
 
 #if 0
-#elifdef A	// { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifdef A	// { dg-warning "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #define M1 1
 #endif
 
@@ -25,7 +25,7 @@ 
 #endif
 
 #if 0
-#elifndef B	// { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifndef B	// { dg-warning "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #define M2 2
 #endif
 
@@ -34,32 +34,32 @@ 
 #endif
 
 #if 0
-#elifdef A	// { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifdef A	// { dg-warning "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #else
 #error "#elifdef A did not apply"
 #endif
 
 #if 0
-#elifndef B	// { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifndef B	// { dg-warning "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #else
 #error "#elifndef B did not apply"
 #endif
 
 #if 1
-#elifdef A	// { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifdef A	// { dg-warning "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #endif
 
 #if 1
-#elifndef B	// { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifndef B	// { dg-warning "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #endif
 
 // As with #elif, the syntax of the new directives is relaxed after a
    non-skipped group. 
 
 #if 1
-#elifdef x * y	// { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifdef x * y	// { dg-warning "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #endif
 
 #if 1
-#elifndef !	// { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifndef !	// { dg-warning "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #endif
--- gcc/testsuite/g++.dg/cpp/elifdef-7.C.jj	2021-10-07 23:03:44.116934656 +0200
+++ gcc/testsuite/g++.dg/cpp/elifdef-7.C	2024-09-13 10:23:22.291230601 +0200
@@ -6,7 +6,7 @@ 
 #undef B
 
 #if 0
-#elifdef A	// { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifdef A	// { dg-error "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #define M1 1
 #endif
 
@@ -25,7 +25,7 @@ 
 #endif
 
 #if 0
-#elifndef B	// { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifndef B	// { dg-error "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #define M2 2
 #endif
 
@@ -34,32 +34,32 @@ 
 #endif
 
 #if 0
-#elifdef A	// { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifdef A	// { dg-error "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #else
 #error "#elifdef A did not apply"
 #endif
 
 #if 0
-#elifndef B	// { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifndef B	// { dg-error "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #else
 #error "#elifndef B did not apply"
 #endif
 
 #if 1
-#elifdef A	// { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifdef A	// { dg-error "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #endif
 
 #if 1
-#elifndef B	// { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifndef B	// { dg-error "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #endif
 
 // As with #elif, the syntax of the new directives is relaxed after a
    non-skipped group. 
 
 #if 1
-#elifdef x * y	// { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifdef x * y	// { dg-error "'#elifdef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #endif
 
 #if 1
-#elifndef !	// { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
+#elifndef !	// { dg-error "'#elifndef' before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } }
 #endif
--- gcc/testsuite/g++.dg/cpp/embed-1.C.jj	2024-09-12 23:12:54.031424116 +0200
+++ gcc/testsuite/g++.dg/cpp/embed-1.C	2024-09-13 10:24:00.101708382 +0200
@@ -6,9 +6,9 @@ 
 #endif
 
 int a =
-#embed __FILE__ limit (1) // { dg-error "#embed is a GCC extension" }
+#embed __FILE__ limit (1) // { dg-error "'#embed' is a GCC extension" }
 ;
 int b =
 (__extension__
-#embed __FILE__ limit (1) // { dg-error "#embed is a GCC extension" }
+#embed __FILE__ limit (1) // { dg-error "'#embed' is a GCC extension" }
 );
--- gcc/testsuite/g++.dg/cpp/embed-2.C.jj	2024-09-12 23:12:54.031424116 +0200
+++ gcc/testsuite/g++.dg/cpp/embed-2.C	2024-09-13 10:24:24.383373016 +0200
@@ -6,9 +6,9 @@ 
 #endif
 
 int a =
-#embed __FILE__ limit (1) // { dg-warning "#embed is a GCC extension" }
+#embed __FILE__ limit (1) // { dg-warning "'#embed' is a GCC extension" }
 ;
 int b =
 (__extension__
-#embed __FILE__ limit (1) // { dg-warning "#embed is a GCC extension" }
+#embed __FILE__ limit (1) // { dg-warning "'#embed' is a GCC extension" }
 );
--- gcc/testsuite/g++.dg/cpp/pedantic-errors.C.jj	2020-01-14 20:02:46.701611062 +0100
+++ gcc/testsuite/g++.dg/cpp/pedantic-errors.C	2024-09-13 10:53:57.298943459 +0200
@@ -2,4 +2,4 @@ 
 /* { dg-options "-std=c++98 -pedantic-errors" } */
 
 #if 1   
-#endif 1 /* { dg-error "extra tokens at end of #endif directive" } */
+#endif 1 /* { dg-error "extra tokens at end of '#endif' directive" } */
--- gcc/testsuite/g++.dg/cpp/warning-1.C.jj	2022-08-25 20:34:49.333893224 +0200
+++ gcc/testsuite/g++.dg/cpp/warning-1.C	2024-09-13 10:37:37.761422912 +0200
@@ -3,4 +3,4 @@ 
 // { dg-options "-pedantic-errors" }
 
 #warning example text /* { dg-warning "example text" } */
-// { dg-error "#warning before C\\\+\\\+23 is a GCC extension" "pedantic" { target c++20_down } .-1 }
+// { dg-error "'#warning' before C\\\+\\\+23 is a GCC extension" "pedantic" { target c++20_down } .-1 }
--- gcc/testsuite/g++.dg/cpp/warning-2.C.jj	2022-08-25 20:34:49.333893224 +0200
+++ gcc/testsuite/g++.dg/cpp/warning-2.C	2024-09-13 10:37:57.462151052 +0200
@@ -3,4 +3,4 @@ 
 // { dg-options "-pedantic" }
 
 #warning example text /* { dg-warning "example text" } */
-// { dg-warning "#warning before C\\\+\\\+23 is a GCC extension" "pedantic" { target c++20_down } .-1 }
+// { dg-warning "'#warning' before C\\\+\\\+23 is a GCC extension" "pedantic" { target c++20_down } .-1 }
--- gcc/testsuite/g++.dg/ext/bitint1.C.jj	2023-09-08 11:29:20.119767813 +0200
+++ gcc/testsuite/g++.dg/ext/bitint1.C	2024-09-13 11:37:09.095581218 +0200
@@ -3,7 +3,7 @@ 
 
 _BitInt(63) a;			// { dg-error "expected" }
 unsigned _BitInt(31) b;		// { dg-error "expected" }
-int c = 21wb;			// { dg-error "invalid suffix \"wb\" on integer constant" "" { target c++98_only } }
+int c = 21wb;			// { dg-error "invalid suffix 'wb' on integer constant" "" { target c++98_only } }
 				// { dg-error "unable to find numeric literal operator 'operator\"\"wb'" "" { target c++11 } .-1 }
-long long d = 60594869054uwb;	// { dg-error "invalid suffix \"uwb\" on integer constant" "" { target c++98_only } }
+long long d = 60594869054uwb;	// { dg-error "invalid suffix 'uwb' on integer constant" "" { target c++98_only } }
 				// { dg-error "unable to find numeric literal operator 'operator\"\"uwb'" "" { target c++11 } .-1 }
--- gcc/testsuite/g++.dg/ext/bitint2.C.jj	2023-09-08 11:29:20.119767813 +0200
+++ gcc/testsuite/g++.dg/ext/bitint2.C	2024-09-13 11:37:40.370171647 +0200
@@ -4,7 +4,7 @@ 
 
 _BitInt(63) a;			// { dg-error "expected" }
 unsigned _BitInt(31) b;		// { dg-error "expected" }
-int c = 21wb;			// { dg-error "invalid suffix \"wb\" on integer constant" "" { target c++98_only } }
+int c = 21wb;			// { dg-error "invalid suffix 'wb' on integer constant" "" { target c++98_only } }
 				// { dg-error "unable to find numeric literal operator 'operator\"\"wb'" "" { target c++11 } .-1 }
-long long d = 60594869054uwb;	// { dg-error "invalid suffix \"uwb\" on integer constant" "" { target c++98_only } }
+long long d = 60594869054uwb;	// { dg-error "invalid suffix 'uwb' on integer constant" "" { target c++98_only } }
 				// { dg-error "unable to find numeric literal operator 'operator\"\"uwb'" "" { target c++11 } .-1 }