<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gcc.git/libcpp/init.cc, branch devel/rust/master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/'/>
<entry>
<title>Update copyright years.</title>
<updated>2024-01-03T11:19:35+00:00</updated>
<author>
<name>Jakub Jelinek</name>
<email>jakub@redhat.com</email>
</author>
<published>2024-01-03T11:19:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=a945c346f57ba40fc80c14ac59be0d43624e559d'/>
<id>a945c346f57ba40fc80c14ac59be0d43624e559d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>c-family: Implement __has_feature and __has_extension [PR60512]</title>
<updated>2023-11-27T10:42:55+00:00</updated>
<author>
<name>Alex Coplan</name>
<email>alex.coplan@arm.com</email>
</author>
<published>2023-03-17T16:30:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=06280a906cb3dc80cf5e07cf3335b758848d488d'/>
<id>06280a906cb3dc80cf5e07cf3335b758848d488d</id>
<content type='text'>
This patch implements clang's __has_feature and __has_extension in GCC.
Currently the patch aims to implement all documented features (and some
undocumented ones) following the documentation at
https://clang.llvm.org/docs/LanguageExtensions.html with the exception
of the legacy features for C++ type traits.  These are omitted, since as
the clang documentation notes, __has_builtin is the correct "modern" way
to query for these (which GCC already implements).

gcc/c-family/ChangeLog:

	PR c++/60512
	* c-common.cc (struct hf_feature_info): New.
	(c_common_register_feature): New.
	(init_has_feature): New.
	(has_feature_p): New.
	* c-common.h (c_common_has_feature): New.
	(c_family_register_lang_features): New.
	(c_common_register_feature): New.
	(has_feature_p): New.
	* c-lex.cc (init_c_lex): Plumb through has_feature callback.
	(c_common_has_builtin): Generalize and move common part ...
	(c_common_lex_availability_macro): ... here.
	(c_common_has_feature): New.
	* c-ppoutput.cc (init_pp_output): Plumb through has_feature.

gcc/c/ChangeLog:

	PR c++/60512
	* c-lang.cc (c_family_register_lang_features): New.
	* c-objc-common.cc (struct c_feature_info): New.
	(c_register_features): New.
	* c-objc-common.h (c_register_features): New.

gcc/cp/ChangeLog:

	PR c++/60512
	* cp-lang.cc (c_family_register_lang_features): New.
	* cp-objcp-common.cc (struct cp_feature_selector): New.
	(cp_feature_selector::has_feature): New.
	(struct cp_feature_info): New.
	(cp_register_features): New.
	* cp-objcp-common.h (cp_register_features): New.

gcc/ChangeLog:

	PR c++/60512
	* doc/cpp.texi: Document __has_{feature,extension}.

gcc/objc/ChangeLog:

	PR c++/60512
	* objc-act.cc (struct objc_feature_info): New.
	(objc_nonfragile_abi_p): New.
	(objc_common_register_features): New.
	* objc-act.h (objc_common_register_features): New.
	* objc-lang.cc (c_family_register_lang_features): New.

gcc/objcp/ChangeLog:

	PR c++/60512
	* objcp-lang.cc (c_family_register_lang_features): New.

libcpp/ChangeLog:

	PR c++/60512
	* include/cpplib.h (struct cpp_callbacks): Add has_feature.
	(enum cpp_builtin_type): Add BT_HAS_{FEATURE,EXTENSION}.
	* init.cc: Add __has_{feature,extension}.
	* macro.cc (_cpp_builtin_macro_text): Handle
	BT_HAS_{FEATURE,EXTENSION}.

gcc/testsuite/ChangeLog:

	PR c++/60512
	* c-c++-common/has-feature-common.c: New test.
	* c-c++-common/has-feature-pedantic.c: New test.
	* g++.dg/ext/has-feature.C: New test.
	* gcc.dg/asan/has-feature-asan.c: New test.
	* gcc.dg/has-feature.c: New test.
	* gcc.dg/ubsan/has-feature-ubsan.c: New test.
	* obj-c++.dg/has-feature.mm: New test.
	* objc.dg/has-feature.m: New test.

Co-Authored-By: Iain Sandoe &lt;iain@sandoe.co.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch implements clang's __has_feature and __has_extension in GCC.
Currently the patch aims to implement all documented features (and some
undocumented ones) following the documentation at
https://clang.llvm.org/docs/LanguageExtensions.html with the exception
of the legacy features for C++ type traits.  These are omitted, since as
the clang documentation notes, __has_builtin is the correct "modern" way
to query for these (which GCC already implements).

gcc/c-family/ChangeLog:

	PR c++/60512
	* c-common.cc (struct hf_feature_info): New.
	(c_common_register_feature): New.
	(init_has_feature): New.
	(has_feature_p): New.
	* c-common.h (c_common_has_feature): New.
	(c_family_register_lang_features): New.
	(c_common_register_feature): New.
	(has_feature_p): New.
	* c-lex.cc (init_c_lex): Plumb through has_feature callback.
	(c_common_has_builtin): Generalize and move common part ...
	(c_common_lex_availability_macro): ... here.
	(c_common_has_feature): New.
	* c-ppoutput.cc (init_pp_output): Plumb through has_feature.

gcc/c/ChangeLog:

	PR c++/60512
	* c-lang.cc (c_family_register_lang_features): New.
	* c-objc-common.cc (struct c_feature_info): New.
	(c_register_features): New.
	* c-objc-common.h (c_register_features): New.

gcc/cp/ChangeLog:

	PR c++/60512
	* cp-lang.cc (c_family_register_lang_features): New.
	* cp-objcp-common.cc (struct cp_feature_selector): New.
	(cp_feature_selector::has_feature): New.
	(struct cp_feature_info): New.
	(cp_register_features): New.
	* cp-objcp-common.h (cp_register_features): New.

gcc/ChangeLog:

	PR c++/60512
	* doc/cpp.texi: Document __has_{feature,extension}.

gcc/objc/ChangeLog:

	PR c++/60512
	* objc-act.cc (struct objc_feature_info): New.
	(objc_nonfragile_abi_p): New.
	(objc_common_register_features): New.
	* objc-act.h (objc_common_register_features): New.
	* objc-lang.cc (c_family_register_lang_features): New.

gcc/objcp/ChangeLog:

	PR c++/60512
	* objcp-lang.cc (c_family_register_lang_features): New.

libcpp/ChangeLog:

	PR c++/60512
	* include/cpplib.h (struct cpp_callbacks): Add has_feature.
	(enum cpp_builtin_type): Add BT_HAS_{FEATURE,EXTENSION}.
	* init.cc: Add __has_{feature,extension}.
	* macro.cc (_cpp_builtin_macro_text): Handle
	BT_HAS_{FEATURE,EXTENSION}.

gcc/testsuite/ChangeLog:

	PR c++/60512
	* c-c++-common/has-feature-common.c: New test.
	* c-c++-common/has-feature-pedantic.c: New test.
	* g++.dg/ext/has-feature.C: New test.
	* gcc.dg/asan/has-feature-asan.c: New test.
	* gcc.dg/has-feature.c: New test.
	* gcc.dg/ubsan/has-feature-ubsan.c: New test.
	* obj-c++.dg/has-feature.mm: New test.
	* objc.dg/has-feature.m: New test.

Co-Authored-By: Iain Sandoe &lt;iain@sandoe.co.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>c: Refer more consistently to C23 not C2X</title>
<updated>2023-11-07T14:20:30+00:00</updated>
<author>
<name>Joseph Myers</name>
<email>joseph@codesourcery.com</email>
</author>
<published>2023-11-07T14:19:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=094a609c69e5608311a39ff66eb646ca3be70652'/>
<id>094a609c69e5608311a39ff66eb646ca3be70652</id>
<content type='text'>
Continuing the move to refer to C23 in place of C2X throughout the
source tree, update documentation, diagnostics, comments, variable and
function names, etc., to use the C23 name.

Testsuite updates are left for a future patch, except for testcases
that test diagnostics that previously mentioned C2X (but in those
testcases, sometimes other comments are updated, not just the
diagnostic expectations).

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

gcc/
	* builtins.def (DEF_C2X_BUILTIN): Rename to DEF_C23_BUILTIN and
	use flag_isoc23 and function_c23_misc.
	* config/rl78/rl78.cc (rl78_option_override): Compare
	lang_hooks.name with "GNU C23" not "GNU C2X".
	* coretypes.h (function_c2x_misc): Rename to function_c23_misc.
	* doc/cpp.texi (@code{__has_attribute}): Refer to C23 instead of
	C2x.
	* doc/extend.texi: Likewise.
	* doc/invoke.texi: Likewise.
	* dwarf2out.cc (highest_c_language, gen_compile_unit_die): Compare
	against and return "GNU C23" language string instead of "GNU C2X".
	* ginclude/float.h: Refer to C23 instead of C2X in comments.
	* ginclude/stdint-gcc.h: Likewise.
	* glimits.h: Likewise.
	* tree.h: Likewise.

gcc/ada/
	* gcc-interface/utils.cc (flag_isoc2x): Rename to flag_isoc23.

gcc/c-family/
	* c-common.cc (flag_isoc2x): Rename to flag_isoc23.
	(c_common_reswords): Use D_C23 instead of D_C2X.
	* c-common.h: Refer throughout to C23 instead of C2X in comments.
	(D_C2X): Rename to D_C23.
	(flag_isoc2x): Rename to flag_isoc23.
	* c-cppbuiltin.cc (builtin_define_float_constants): Use
	flag_isoc23 instead of flag_isoc2x.  Refer to C23 instead of C2x
	in comments.
	* c-format.cc: Use STD_C23 instead of STD_C2X and flag_isoc23
	instead of flag_isoc2x.  Refer to C23 instead of C2X in comments.
	* c-format.h: Use STD_C23 instead of STD_C2X.
	* c-lex.cc: Use warn_c11_c23_compat instead of warn_c11_c2x_compat
	and flag_isoc23 instead of flag_isoc2x.  Refer to C23 instead of
	C2X in diagnostics.
	* c-opts.cc: Use flag_isoc23 instead of flag_isoc2x.  Refer to C23
	instead of C2X in comments.
	(set_std_c2x): Rename to set_std_c23.
	* c.opt (Wc11-c23-compat): Use CPP(cpp_warn_c11_c23_compat)
	CppReason(CPP_W_C11_C23_COMPAT) Var(warn_c11_c23_compat) instead
	of CPP(cpp_warn_c11_c2x_compat) CppReason(CPP_W_C11_C2X_COMPAT)
	Var(warn_c11_c2x_compat).

gcc/c/
	* c-decl.cc: Use flag_isoc23 instead of flag_isoc2x and c23_auto_p
	instead of c2x_auto_p.  Refer to C23 instead of C2X in diagnostics
	and comments.
	* c-errors.cc: Use flag_isoc23 instead of flag_isoc2x and
	warn_c11_c23_compat instead of warn_c11_c2x_compat.  Refer to C23
	instead of C2X in comments.
	* c-parser.cc: Use flag_isoc23 instead of flag_isoc2x,
	warn_c11_c23_compat instead of warn_c11_c2x_compat, c23_auto_p
	instead of c2x_auto_p and D_C23 instead of D_C2X.  Refer to C23
	instead of C2X in diagnostics and comments.
	* c-tree.h: Refer to C23 instead of C2X in comments.
	(struct c_declspecs): Rename c2x_auto_p to c23_auto_p.
	* c-typeck.cc: Use flag_isoc23 instead of flag_isoc2x and
	warn_c11_c23_compat instead of warn_c11_c2x_compat.  Refer to C23
	instead of C2X in diagnostics and comments.

gcc/fortran/
	* gfortran.h (gfc_real_info): Refer to C23 instead of C2X in
	comment.

gcc/lto/
	* lto-lang.cc (flag_isoc2x): Rename to flag_isoc23.

gcc/testsuite/
	* gcc.dg/binary-constants-2.c: Refer to C23 instead of C2X.
	* gcc.dg/binary-constants-3.c: Likewise.
	* gcc.dg/bitint-23.c: Likewise.
	* gcc.dg/bitint-26.c: Likewise.
	* gcc.dg/bitint-27.c: Likewise.
	* gcc.dg/c11-attr-syntax-1.c: Likewise.
	* gcc.dg/c11-attr-syntax-2.c: Likewise.
	* gcc.dg/c11-floatn-1.c: Likewise.
	* gcc.dg/c11-floatn-2.c: Likewise.
	* gcc.dg/c11-floatn-3.c: Likewise.
	* gcc.dg/c11-floatn-4.c: Likewise.
	* gcc.dg/c11-floatn-5.c: Likewise.
	* gcc.dg/c11-floatn-6.c: Likewise.
	* gcc.dg/c11-floatn-7.c: Likewise.
	* gcc.dg/c11-floatn-8.c: Likewise.
	* gcc.dg/c2x-attr-syntax-4.c: Likewise.
	* gcc.dg/c2x-attr-syntax-6.c: Likewise.
	* gcc.dg/c2x-attr-syntax-7.c: Likewise.
	* gcc.dg/c2x-binary-constants-2.c: Likewise.
	* gcc.dg/c2x-floatn-5.c: Likewise.
	* gcc.dg/c2x-floatn-6.c: Likewise.
	* gcc.dg/c2x-floatn-7.c: Likewise.
	* gcc.dg/c2x-floatn-8.c: Likewise.
	* gcc.dg/c2x-nullptr-4.c: Likewise.
	* gcc.dg/c2x-qual-2.c: Likewise.
	* gcc.dg/c2x-qual-3.c: Likewise.
	* gcc.dg/c2x-qual-6.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/c2x-warning-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/gnu2x-warning-2.c: Likewise.
	* gcc.dg/dfp/c11-constants-1.c: Likewise.
	* gcc.dg/dfp/c11-constants-2.c: Likewise.
	* gcc.dg/dfp/c2x-constants-2.c: Likewise.
	* gcc.dg/dfp/constants-pedantic.c: Likewise.
	* gcc.dg/pr30260.c: Likewise.
	* gcc.dg/system-binary-constants-1.c: Likewise.

libcpp/
	* directives.cc: Refer to C23 instead of C2X in diagnostics and
	comments.
	(STDC2X): Rename to STDC23.
	* expr.cc: Use cpp_warn_c11_c23_compat instead of
	cpp_warn_c11_c2x_compat and CPP_W_C11_C23_COMPAT instead of
	CPP_W_C11_C2X_COMPAT.  Refer to C23 instead of C2X in diagnostics
	and comments.
	* include/cpplib.h: Refer to C23 instead of C2X in diagnostics and
	comments.
	(CLK_GNUC2X): Rename to CLK_GNUC23.
	(CLK_STDC2X): Rename to CLK_STDC23.
	(CPP_W_C11_C2X_COMPAT): Rename to CPP_W_C11_C23_COMPAT.
	* init.cc: Use GNUC23 instead of GNUC2X, STDC23 instead of STDC2X
	and cpp_warn_c11_c23_compat instead of cpp_warn_c11_c2x_compat.
	* lex.cc (maybe_va_opt_error): Refer to C23 instead of C2X in
	diagnostic.
	* macro.cc (_cpp_arguments_ok): Refer to C23 instead of C2X in
	comment.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Continuing the move to refer to C23 in place of C2X throughout the
source tree, update documentation, diagnostics, comments, variable and
function names, etc., to use the C23 name.

Testsuite updates are left for a future patch, except for testcases
that test diagnostics that previously mentioned C2X (but in those
testcases, sometimes other comments are updated, not just the
diagnostic expectations).

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

gcc/
	* builtins.def (DEF_C2X_BUILTIN): Rename to DEF_C23_BUILTIN and
	use flag_isoc23 and function_c23_misc.
	* config/rl78/rl78.cc (rl78_option_override): Compare
	lang_hooks.name with "GNU C23" not "GNU C2X".
	* coretypes.h (function_c2x_misc): Rename to function_c23_misc.
	* doc/cpp.texi (@code{__has_attribute}): Refer to C23 instead of
	C2x.
	* doc/extend.texi: Likewise.
	* doc/invoke.texi: Likewise.
	* dwarf2out.cc (highest_c_language, gen_compile_unit_die): Compare
	against and return "GNU C23" language string instead of "GNU C2X".
	* ginclude/float.h: Refer to C23 instead of C2X in comments.
	* ginclude/stdint-gcc.h: Likewise.
	* glimits.h: Likewise.
	* tree.h: Likewise.

gcc/ada/
	* gcc-interface/utils.cc (flag_isoc2x): Rename to flag_isoc23.

gcc/c-family/
	* c-common.cc (flag_isoc2x): Rename to flag_isoc23.
	(c_common_reswords): Use D_C23 instead of D_C2X.
	* c-common.h: Refer throughout to C23 instead of C2X in comments.
	(D_C2X): Rename to D_C23.
	(flag_isoc2x): Rename to flag_isoc23.
	* c-cppbuiltin.cc (builtin_define_float_constants): Use
	flag_isoc23 instead of flag_isoc2x.  Refer to C23 instead of C2x
	in comments.
	* c-format.cc: Use STD_C23 instead of STD_C2X and flag_isoc23
	instead of flag_isoc2x.  Refer to C23 instead of C2X in comments.
	* c-format.h: Use STD_C23 instead of STD_C2X.
	* c-lex.cc: Use warn_c11_c23_compat instead of warn_c11_c2x_compat
	and flag_isoc23 instead of flag_isoc2x.  Refer to C23 instead of
	C2X in diagnostics.
	* c-opts.cc: Use flag_isoc23 instead of flag_isoc2x.  Refer to C23
	instead of C2X in comments.
	(set_std_c2x): Rename to set_std_c23.
	* c.opt (Wc11-c23-compat): Use CPP(cpp_warn_c11_c23_compat)
	CppReason(CPP_W_C11_C23_COMPAT) Var(warn_c11_c23_compat) instead
	of CPP(cpp_warn_c11_c2x_compat) CppReason(CPP_W_C11_C2X_COMPAT)
	Var(warn_c11_c2x_compat).

gcc/c/
	* c-decl.cc: Use flag_isoc23 instead of flag_isoc2x and c23_auto_p
	instead of c2x_auto_p.  Refer to C23 instead of C2X in diagnostics
	and comments.
	* c-errors.cc: Use flag_isoc23 instead of flag_isoc2x and
	warn_c11_c23_compat instead of warn_c11_c2x_compat.  Refer to C23
	instead of C2X in comments.
	* c-parser.cc: Use flag_isoc23 instead of flag_isoc2x,
	warn_c11_c23_compat instead of warn_c11_c2x_compat, c23_auto_p
	instead of c2x_auto_p and D_C23 instead of D_C2X.  Refer to C23
	instead of C2X in diagnostics and comments.
	* c-tree.h: Refer to C23 instead of C2X in comments.
	(struct c_declspecs): Rename c2x_auto_p to c23_auto_p.
	* c-typeck.cc: Use flag_isoc23 instead of flag_isoc2x and
	warn_c11_c23_compat instead of warn_c11_c2x_compat.  Refer to C23
	instead of C2X in diagnostics and comments.

gcc/fortran/
	* gfortran.h (gfc_real_info): Refer to C23 instead of C2X in
	comment.

gcc/lto/
	* lto-lang.cc (flag_isoc2x): Rename to flag_isoc23.

gcc/testsuite/
	* gcc.dg/binary-constants-2.c: Refer to C23 instead of C2X.
	* gcc.dg/binary-constants-3.c: Likewise.
	* gcc.dg/bitint-23.c: Likewise.
	* gcc.dg/bitint-26.c: Likewise.
	* gcc.dg/bitint-27.c: Likewise.
	* gcc.dg/c11-attr-syntax-1.c: Likewise.
	* gcc.dg/c11-attr-syntax-2.c: Likewise.
	* gcc.dg/c11-floatn-1.c: Likewise.
	* gcc.dg/c11-floatn-2.c: Likewise.
	* gcc.dg/c11-floatn-3.c: Likewise.
	* gcc.dg/c11-floatn-4.c: Likewise.
	* gcc.dg/c11-floatn-5.c: Likewise.
	* gcc.dg/c11-floatn-6.c: Likewise.
	* gcc.dg/c11-floatn-7.c: Likewise.
	* gcc.dg/c11-floatn-8.c: Likewise.
	* gcc.dg/c2x-attr-syntax-4.c: Likewise.
	* gcc.dg/c2x-attr-syntax-6.c: Likewise.
	* gcc.dg/c2x-attr-syntax-7.c: Likewise.
	* gcc.dg/c2x-binary-constants-2.c: Likewise.
	* gcc.dg/c2x-floatn-5.c: Likewise.
	* gcc.dg/c2x-floatn-6.c: Likewise.
	* gcc.dg/c2x-floatn-7.c: Likewise.
	* gcc.dg/c2x-floatn-8.c: Likewise.
	* gcc.dg/c2x-nullptr-4.c: Likewise.
	* gcc.dg/c2x-qual-2.c: Likewise.
	* gcc.dg/c2x-qual-3.c: Likewise.
	* gcc.dg/c2x-qual-6.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/c2x-warning-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/gnu2x-warning-2.c: Likewise.
	* gcc.dg/dfp/c11-constants-1.c: Likewise.
	* gcc.dg/dfp/c11-constants-2.c: Likewise.
	* gcc.dg/dfp/c2x-constants-2.c: Likewise.
	* gcc.dg/dfp/constants-pedantic.c: Likewise.
	* gcc.dg/pr30260.c: Likewise.
	* gcc.dg/system-binary-constants-1.c: Likewise.

libcpp/
	* directives.cc: Refer to C23 instead of C2X in diagnostics and
	comments.
	(STDC2X): Rename to STDC23.
	* expr.cc: Use cpp_warn_c11_c23_compat instead of
	cpp_warn_c11_c2x_compat and CPP_W_C11_C23_COMPAT instead of
	CPP_W_C11_C2X_COMPAT.  Refer to C23 instead of C2X in diagnostics
	and comments.
	* include/cpplib.h: Refer to C23 instead of C2X in diagnostics and
	comments.
	(CLK_GNUC2X): Rename to CLK_GNUC23.
	(CLK_STDC2X): Rename to CLK_STDC23.
	(CPP_W_C11_C2X_COMPAT): Rename to CPP_W_C11_C23_COMPAT.
	* init.cc: Use GNUC23 instead of GNUC2X, STDC23 instead of STDC2X
	and cpp_warn_c11_c23_compat instead of cpp_warn_c11_c2x_compat.
	* lex.cc (maybe_va_opt_error): Refer to C23 instead of C2X in
	diagnostic.
	* macro.cc (_cpp_arguments_ok): Refer to C23 instead of C2X in
	comment.
</pre>
</div>
</content>
</entry>
<entry>
<title>libcpp: Improve the diagnostic for poisoned identifiers [PR36887]</title>
<updated>2023-10-23T22:35:26+00:00</updated>
<author>
<name>Lewis Hyatt</name>
<email>lhyatt@gmail.com</email>
</author>
<published>2023-09-07T21:02:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=cb05acdcea298b62e7fb00dcc153f5d506d085fe'/>
<id>cb05acdcea298b62e7fb00dcc153f5d506d085fe</id>
<content type='text'>
The PR requests an enhancement to the diagnostic issued for the use of a
poisoned identifier. Currently, we show the location of the usage, but not
the location which requested the poisoning, which would be helpful for the
user if the decision to poison an identifier was made externally, such as
in a library header.

In order to output this information, we need to remember a location_t for
each identifier that has been poisoned, and that data needs to be preserved
as well in a PCH. One option would be to add a field to struct cpp_hashnode,
but there is no convenient place to add it without increasing the size of
the struct for all identifiers. Given this facility will be needed rarely,
it seemed better to add a second hash map, which is handled PCH-wise the
same as the current one in gcc/stringpool.cc. This hash map associates a new
struct cpp_hashnode_extra with each identifier that needs one. Currently
that struct only contains the new location_t, but it could be extended in
the future if there is other ancillary data that may be convenient to put
there for other purposes.

libcpp/ChangeLog:

	PR preprocessor/36887
	* directives.cc (do_pragma_poison): Store in the extra hash map the
	location from which an identifier has been poisoned.
	* lex.cc (identifier_diagnostics_on_lex): When issuing a diagnostic
	for the use of a poisoned identifier, also add a note indicating the
	location from which it was poisoned.
	* identifiers.cc (alloc_node): Convert to template function.
	(_cpp_init_hashtable): Handle the new extra hash map.
	(_cpp_destroy_hashtable): Likewise.
	* include/cpplib.h (struct cpp_hashnode_extra): New struct.
	(cpp_create_reader): Update prototype to...
	* init.cc (cpp_create_reader): ...accept an argument for the extra
	hash table and pass it to _cpp_init_hashtable.
	* include/symtab.h (ht_lookup): New overload for convenience.
	* internal.h (struct cpp_reader): Add EXTRA_HASH_TABLE member.
	(_cpp_init_hashtable): Adjust prototype.

gcc/c-family/ChangeLog:

	PR preprocessor/36887
	* c-opts.cc (c_common_init_options): Pass new extra hash map
	argument to cpp_create_reader().

gcc/ChangeLog:

	PR preprocessor/36887
	* toplev.h (ident_hash_extra): Declare...
	* stringpool.cc (ident_hash_extra): ...this new global variable.
	(init_stringpool): Handle ident_hash_extra as well as ident_hash.
	(ggc_mark_stringpool): Likewise.
	(ggc_purge_stringpool): Likewise.
	(struct string_pool_data_extra): New struct.
	(spd2): New GC root variable.
	(gt_pch_save_stringpool): Use spd2 to handle ident_hash_extra,
	analogous to how spd is used to handle ident_hash.
	(gt_pch_restore_stringpool): Likewise.

gcc/testsuite/ChangeLog:

	PR preprocessor/36887
	* c-c++-common/cpp/diagnostic-poison.c: New test.
	* g++.dg/pch/pr36887.C: New test.
	* g++.dg/pch/pr36887.Hs: New test.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The PR requests an enhancement to the diagnostic issued for the use of a
poisoned identifier. Currently, we show the location of the usage, but not
the location which requested the poisoning, which would be helpful for the
user if the decision to poison an identifier was made externally, such as
in a library header.

In order to output this information, we need to remember a location_t for
each identifier that has been poisoned, and that data needs to be preserved
as well in a PCH. One option would be to add a field to struct cpp_hashnode,
but there is no convenient place to add it without increasing the size of
the struct for all identifiers. Given this facility will be needed rarely,
it seemed better to add a second hash map, which is handled PCH-wise the
same as the current one in gcc/stringpool.cc. This hash map associates a new
struct cpp_hashnode_extra with each identifier that needs one. Currently
that struct only contains the new location_t, but it could be extended in
the future if there is other ancillary data that may be convenient to put
there for other purposes.

libcpp/ChangeLog:

	PR preprocessor/36887
	* directives.cc (do_pragma_poison): Store in the extra hash map the
	location from which an identifier has been poisoned.
	* lex.cc (identifier_diagnostics_on_lex): When issuing a diagnostic
	for the use of a poisoned identifier, also add a note indicating the
	location from which it was poisoned.
	* identifiers.cc (alloc_node): Convert to template function.
	(_cpp_init_hashtable): Handle the new extra hash map.
	(_cpp_destroy_hashtable): Likewise.
	* include/cpplib.h (struct cpp_hashnode_extra): New struct.
	(cpp_create_reader): Update prototype to...
	* init.cc (cpp_create_reader): ...accept an argument for the extra
	hash table and pass it to _cpp_init_hashtable.
	* include/symtab.h (ht_lookup): New overload for convenience.
	* internal.h (struct cpp_reader): Add EXTRA_HASH_TABLE member.
	(_cpp_init_hashtable): Adjust prototype.

gcc/c-family/ChangeLog:

	PR preprocessor/36887
	* c-opts.cc (c_common_init_options): Pass new extra hash map
	argument to cpp_create_reader().

gcc/ChangeLog:

	PR preprocessor/36887
	* toplev.h (ident_hash_extra): Declare...
	* stringpool.cc (ident_hash_extra): ...this new global variable.
	(init_stringpool): Handle ident_hash_extra as well as ident_hash.
	(ggc_mark_stringpool): Likewise.
	(ggc_purge_stringpool): Likewise.
	(struct string_pool_data_extra): New struct.
	(spd2): New GC root variable.
	(gt_pch_save_stringpool): Use spd2 to handle ident_hash_extra,
	analogous to how spd is used to handle ident_hash.
	(gt_pch_restore_stringpool): Likewise.

gcc/testsuite/ChangeLog:

	PR preprocessor/36887
	* c-c++-common/cpp/diagnostic-poison.c: New test.
	* g++.dg/pch/pr36887.C: New test.
	* g++.dg/pch/pr36887.Hs: New test.
</pre>
</div>
</content>
</entry>
<entry>
<title>libcpp: eliminate LINEMAPS_{,ORDINARY_,MACRO_}CACHE</title>
<updated>2023-10-08T22:43:17+00:00</updated>
<author>
<name>David Malcolm</name>
<email>dmalcolm@redhat.com</email>
</author>
<published>2023-10-08T22:43:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=45bae1809c3919ae3b77b59fd5502c2ab8340418'/>
<id>45bae1809c3919ae3b77b59fd5502c2ab8340418</id>
<content type='text'>
It's simpler to use field access than to go through these inline
functions that look as if they are macros.

No functional change intended.

libcpp/ChangeLog:
	* include/line-map.h (maps_info_ordinary::cache): Rename to...
	(maps_info_ordinary::m_cache): ...this.
	(maps_info_macro::cache): Rename to...
	(maps_info_macro::m_cache): ...this.
	(LINEMAPS_CACHE): Delete.
	(LINEMAPS_ORDINARY_CACHE): Delete.
	(LINEMAPS_MACRO_CACHE): Delete.
	* init.cc (read_original_filename): Update for adding "m_" prefix.
	* line-map.cc (linemap_add): Eliminate LINEMAPS_ORDINARY_CACHE in
	favor of a simple field access.
	(linemap_enter_macro): Likewise for LINEMAPS_MACRO_CACHE.
	(linemap_ordinary_map_lookup): Likewise for
	LINEMAPS_ORDINARY_CACHE, twice.
	(linemap_lookup_macro_index): Likewise for LINEMAPS_MACRO_CACHE.

Signed-off-by: David Malcolm &lt;dmalcolm@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It's simpler to use field access than to go through these inline
functions that look as if they are macros.

No functional change intended.

libcpp/ChangeLog:
	* include/line-map.h (maps_info_ordinary::cache): Rename to...
	(maps_info_ordinary::m_cache): ...this.
	(maps_info_macro::cache): Rename to...
	(maps_info_macro::m_cache): ...this.
	(LINEMAPS_CACHE): Delete.
	(LINEMAPS_ORDINARY_CACHE): Delete.
	(LINEMAPS_MACRO_CACHE): Delete.
	* init.cc (read_original_filename): Update for adding "m_" prefix.
	* line-map.cc (linemap_add): Eliminate LINEMAPS_ORDINARY_CACHE in
	favor of a simple field access.
	(linemap_enter_macro): Likewise for LINEMAPS_MACRO_CACHE.
	(linemap_ordinary_map_lookup): Likewise for
	LINEMAPS_ORDINARY_CACHE, twice.
	(linemap_lookup_macro_index): Likewise for LINEMAPS_MACRO_CACHE.

Signed-off-by: David Malcolm &lt;dmalcolm@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>p1689r5: initial support</title>
<updated>2023-09-19T21:32:23+00:00</updated>
<author>
<name>Ben Boeckel</name>
<email>ben.boeckel@kitware.com</email>
</author>
<published>2023-09-01T13:04:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=024f135a1e9b8f8e102960357cae6e99e1dbe6eb'/>
<id>024f135a1e9b8f8e102960357cae6e99e1dbe6eb</id>
<content type='text'>
This patch implements support for [P1689R5][] to communicate to a build
system the C++20 module dependencies to build systems so that they may
build `.gcm` files in the proper order.

Support is communicated through the following three new flags:

- `-fdeps-format=` specifies the format for the output. Currently named
  `p1689r5`.

- `-fdeps-file=` specifies the path to the file to write the format to.

- `-fdeps-target=` specifies the `.o` that will be written for the TU
  that is scanned. This is required so that the build system can
  correlate the dependency output with the actual compilation that will
  occur.

CMake supports this format as of 17 Jun 2022 (to be part of 3.25.0)
using an experimental feature selection (to allow for future usage
evolution without committing to how it works today). While it remains
experimental, docs may be found in CMake's documentation for
experimental features.

Future work may include using this format for Fortran module
dependencies as well, however this is still pending work.

[P1689R5]: https://isocpp.org/files/papers/P1689R5.html
[cmake-experimental]: https://gitlab.kitware.com/cmake/cmake/-/blob/master/Help/dev/experimental.rst

TODO:

- header-unit information fields

Header units (including the standard library headers) are 100%
unsupported right now because the `-E` mechanism wants to import their
BMIs. A new mode (i.e., something more workable than existing `-E`
behavior) that mocks up header units as if they were imported purely
from their path and content would be required.

- non-utf8 paths

The current standard says that paths that are not unambiguously
represented using UTF-8 are not supported (because these cases are rare
and the extra complication is not worth it at this time). Future
versions of the format might have ways of encoding non-UTF-8 paths. For
now, this patch just doesn't support non-UTF-8 paths (ignoring the
"unambiguously representable in UTF-8" case).

- figure out why junk gets placed at the end of the file

Sometimes it seems like the file gets a lot of `NUL` bytes appended to
it. It happens rarely and seems to be the result of some
`ftruncate`-style call which results in extra padding in the contents.
Noting it here as an observation at least.

libcpp/

	* include/cpplib.h: Add cpp_fdeps_format enum.
	(cpp_options): Add fdeps_format field
	(cpp_finish): Add structured dependency fdeps_stream parameter.
	* include/mkdeps.h (deps_add_module_target): Add flag for
	whether a module is exported or not.
	(fdeps_add_target): Add function.
	(deps_write_p1689r5): Add function.
	* init.cc (cpp_finish): Add new preprocessor parameter used for C++
	module tracking.
	* mkdeps.cc (mkdeps): Implement P1689R5 output.

gcc/

	* doc/invoke.texi: Document -fdeps-format=, -fdeps-file=, and
	-fdeps-target= flags.
	* gcc.cc: add defaults for -fdeps-target= and -fdeps-file= when
	only -fdeps-format= is specified.
	* json.h: Add a TODO item to refactor out to share with
	`libcpp/mkdeps.cc`.

gcc/c-family/

	* c-opts.cc (c_common_handle_option): Add fdeps_file variable and
	-fdeps-format=, -fdeps-file=, and -fdeps-target= parsing.
	* c.opt: Add -fdeps-format=, -fdeps-file=, and -fdeps-target=
	flags.

gcc/cp/

	* module.cc (preprocessed_module): Pass whether the module is
	exported to dependency tracking.

gcc/testsuite/

	* g++.dg/modules/depflags-f-MD.C: New test.
	* g++.dg/modules/depflags-f.C: New test.
	* g++.dg/modules/depflags-fi.C: New test.
	* g++.dg/modules/depflags-fj-MD.C: New test.
	* g++.dg/modules/depflags-fj.C: New test.
	* g++.dg/modules/depflags-fjo-MD.C: New test.
	* g++.dg/modules/depflags-fjo.C: New test.
	* g++.dg/modules/depflags-fo-MD.C: New test.
	* g++.dg/modules/depflags-fo.C: New test.
	* g++.dg/modules/depflags-j-MD.C: New test.
	* g++.dg/modules/depflags-j.C: New test.
	* g++.dg/modules/depflags-jo-MD.C: New test.
	* g++.dg/modules/depflags-jo.C: New test.
	* g++.dg/modules/depflags-o-MD.C: New test.
	* g++.dg/modules/depflags-o.C: New test.
	* g++.dg/modules/p1689-1.C: New test.
	* g++.dg/modules/p1689-1.exp.ddi: New test expectation.
	* g++.dg/modules/p1689-2.C: New test.
	* g++.dg/modules/p1689-2.exp.ddi: New test expectation.
	* g++.dg/modules/p1689-3.C: New test.
	* g++.dg/modules/p1689-3.exp.ddi: New test expectation.
	* g++.dg/modules/p1689-4.C: New test.
	* g++.dg/modules/p1689-4.exp.ddi: New test expectation.
	* g++.dg/modules/p1689-5.C: New test.
	* g++.dg/modules/p1689-5.exp.ddi: New test expectation.
	* g++.dg/modules/modules.exp: Load new P1689 library routines.
	* g++.dg/modules/test-p1689.py: New tool for validating P1689 output.
	* lib/modules.exp: Support for validating P1689 outputs.

Signed-off-by: Ben Boeckel &lt;ben.boeckel@kitware.com&gt;
Reviewed-by: Jason Merrill &lt;jason@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch implements support for [P1689R5][] to communicate to a build
system the C++20 module dependencies to build systems so that they may
build `.gcm` files in the proper order.

Support is communicated through the following three new flags:

- `-fdeps-format=` specifies the format for the output. Currently named
  `p1689r5`.

- `-fdeps-file=` specifies the path to the file to write the format to.

- `-fdeps-target=` specifies the `.o` that will be written for the TU
  that is scanned. This is required so that the build system can
  correlate the dependency output with the actual compilation that will
  occur.

CMake supports this format as of 17 Jun 2022 (to be part of 3.25.0)
using an experimental feature selection (to allow for future usage
evolution without committing to how it works today). While it remains
experimental, docs may be found in CMake's documentation for
experimental features.

Future work may include using this format for Fortran module
dependencies as well, however this is still pending work.

[P1689R5]: https://isocpp.org/files/papers/P1689R5.html
[cmake-experimental]: https://gitlab.kitware.com/cmake/cmake/-/blob/master/Help/dev/experimental.rst

TODO:

- header-unit information fields

Header units (including the standard library headers) are 100%
unsupported right now because the `-E` mechanism wants to import their
BMIs. A new mode (i.e., something more workable than existing `-E`
behavior) that mocks up header units as if they were imported purely
from their path and content would be required.

- non-utf8 paths

The current standard says that paths that are not unambiguously
represented using UTF-8 are not supported (because these cases are rare
and the extra complication is not worth it at this time). Future
versions of the format might have ways of encoding non-UTF-8 paths. For
now, this patch just doesn't support non-UTF-8 paths (ignoring the
"unambiguously representable in UTF-8" case).

- figure out why junk gets placed at the end of the file

Sometimes it seems like the file gets a lot of `NUL` bytes appended to
it. It happens rarely and seems to be the result of some
`ftruncate`-style call which results in extra padding in the contents.
Noting it here as an observation at least.

libcpp/

	* include/cpplib.h: Add cpp_fdeps_format enum.
	(cpp_options): Add fdeps_format field
	(cpp_finish): Add structured dependency fdeps_stream parameter.
	* include/mkdeps.h (deps_add_module_target): Add flag for
	whether a module is exported or not.
	(fdeps_add_target): Add function.
	(deps_write_p1689r5): Add function.
	* init.cc (cpp_finish): Add new preprocessor parameter used for C++
	module tracking.
	* mkdeps.cc (mkdeps): Implement P1689R5 output.

gcc/

	* doc/invoke.texi: Document -fdeps-format=, -fdeps-file=, and
	-fdeps-target= flags.
	* gcc.cc: add defaults for -fdeps-target= and -fdeps-file= when
	only -fdeps-format= is specified.
	* json.h: Add a TODO item to refactor out to share with
	`libcpp/mkdeps.cc`.

gcc/c-family/

	* c-opts.cc (c_common_handle_option): Add fdeps_file variable and
	-fdeps-format=, -fdeps-file=, and -fdeps-target= parsing.
	* c.opt: Add -fdeps-format=, -fdeps-file=, and -fdeps-target=
	flags.

gcc/cp/

	* module.cc (preprocessed_module): Pass whether the module is
	exported to dependency tracking.

gcc/testsuite/

	* g++.dg/modules/depflags-f-MD.C: New test.
	* g++.dg/modules/depflags-f.C: New test.
	* g++.dg/modules/depflags-fi.C: New test.
	* g++.dg/modules/depflags-fj-MD.C: New test.
	* g++.dg/modules/depflags-fj.C: New test.
	* g++.dg/modules/depflags-fjo-MD.C: New test.
	* g++.dg/modules/depflags-fjo.C: New test.
	* g++.dg/modules/depflags-fo-MD.C: New test.
	* g++.dg/modules/depflags-fo.C: New test.
	* g++.dg/modules/depflags-j-MD.C: New test.
	* g++.dg/modules/depflags-j.C: New test.
	* g++.dg/modules/depflags-jo-MD.C: New test.
	* g++.dg/modules/depflags-jo.C: New test.
	* g++.dg/modules/depflags-o-MD.C: New test.
	* g++.dg/modules/depflags-o.C: New test.
	* g++.dg/modules/p1689-1.C: New test.
	* g++.dg/modules/p1689-1.exp.ddi: New test expectation.
	* g++.dg/modules/p1689-2.C: New test.
	* g++.dg/modules/p1689-2.exp.ddi: New test expectation.
	* g++.dg/modules/p1689-3.C: New test.
	* g++.dg/modules/p1689-3.exp.ddi: New test expectation.
	* g++.dg/modules/p1689-4.C: New test.
	* g++.dg/modules/p1689-4.exp.ddi: New test expectation.
	* g++.dg/modules/p1689-5.C: New test.
	* g++.dg/modules/p1689-5.exp.ddi: New test expectation.
	* g++.dg/modules/modules.exp: Load new P1689 library routines.
	* g++.dg/modules/test-p1689.py: New tool for validating P1689 output.
	* lib/modules.exp: Support for validating P1689 outputs.

Signed-off-by: Ben Boeckel &lt;ben.boeckel@kitware.com&gt;
Reviewed-by: Jason Merrill &lt;jason@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>c++: Add support for -std={c,gnu}++2{c,6}</title>
<updated>2023-06-23T20:46:29+00:00</updated>
<author>
<name>Marek Polacek</name>
<email>polacek@redhat.com</email>
</author>
<published>2023-06-22T20:56:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=5388a43f6a3f348929292998bd6d0c1da6f006de'/>
<id>5388a43f6a3f348929292998bd6d0c1da6f006de</id>
<content type='text'>
It seems prudent to add C++26 now that the first C++26 papers have been
approved.  I followed commit r11-6920 as well as r8-3237.

Since C++23 is essentially finished and its __cplusplus value has
settled to 202302L, I've updated cpp_init_builtins and marked
-std=c++2b Undocumented and made -std=c++23 no longer Undocumented.

As for __cplusplus, I've chosen 202400L:

  $ xg++ -std=c++26 -dM -E -x c++ - &lt; /dev/null | grep cplusplus
  #define __cplusplus 202400L

I've verified the patch with a simple test, exercising the new
directives.  Don't forget to update your GXX_TESTSUITE_STDS!

This patch does not add -Wc++26-extensions.

gcc/c-family/ChangeLog:

	* c-common.h (cxx_dialect): Add cxx26 as a dialect.
	* c-opts.cc (set_std_cxx26): New.
	(c_common_handle_option): Set options when -std={c,gnu}++2{c,6} is
	enabled.
	(c_common_post_options): Adjust comments.
	* c.opt: Add options for -std=c++26, std=c++2c, -std=gnu++26,
	and -std=gnu++2c.
	(std=c++2b): Mark as Undocumented.
	(std=c++23): No longer Undocumented.

gcc/ChangeLog:

	* doc/cpp.texi (__cplusplus): Document value for -std=c++26 and
	-std=gnu++26.  Document that for C++23, its value is 202302L.
	* doc/invoke.texi: Document -std=c++26 and -std=gnu++26.
	* dwarf2out.cc (highest_c_language): Handle GNU C++26.
	(gen_compile_unit_die): Likewise.

libcpp/ChangeLog:

	* include/cpplib.h (c_lang): Add CXX26 and GNUCXX26.
	* init.cc (lang_defaults): Add rows for CXX26 and GNUCXX26.
	(cpp_init_builtins): Set __cplusplus to 202400L for C++26.
	Set __cplusplus to 202302L for C++23.

gcc/testsuite/ChangeLog:

	* lib/target-supports.exp (check_effective_target_c++23): Return
	1 also if check_effective_target_c++26.
	(check_effective_target_c++23_down): New.
	(check_effective_target_c++26_only): New.
	(check_effective_target_c++26): New.
	* g++.dg/cpp23/cplusplus.C: Adjust expected value.
	* g++.dg/cpp26/cplusplus.C: New test.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It seems prudent to add C++26 now that the first C++26 papers have been
approved.  I followed commit r11-6920 as well as r8-3237.

Since C++23 is essentially finished and its __cplusplus value has
settled to 202302L, I've updated cpp_init_builtins and marked
-std=c++2b Undocumented and made -std=c++23 no longer Undocumented.

As for __cplusplus, I've chosen 202400L:

  $ xg++ -std=c++26 -dM -E -x c++ - &lt; /dev/null | grep cplusplus
  #define __cplusplus 202400L

I've verified the patch with a simple test, exercising the new
directives.  Don't forget to update your GXX_TESTSUITE_STDS!

This patch does not add -Wc++26-extensions.

gcc/c-family/ChangeLog:

	* c-common.h (cxx_dialect): Add cxx26 as a dialect.
	* c-opts.cc (set_std_cxx26): New.
	(c_common_handle_option): Set options when -std={c,gnu}++2{c,6} is
	enabled.
	(c_common_post_options): Adjust comments.
	* c.opt: Add options for -std=c++26, std=c++2c, -std=gnu++26,
	and -std=gnu++2c.
	(std=c++2b): Mark as Undocumented.
	(std=c++23): No longer Undocumented.

gcc/ChangeLog:

	* doc/cpp.texi (__cplusplus): Document value for -std=c++26 and
	-std=gnu++26.  Document that for C++23, its value is 202302L.
	* doc/invoke.texi: Document -std=c++26 and -std=gnu++26.
	* dwarf2out.cc (highest_c_language): Handle GNU C++26.
	(gen_compile_unit_die): Likewise.

libcpp/ChangeLog:

	* include/cpplib.h (c_lang): Add CXX26 and GNUCXX26.
	* init.cc (lang_defaults): Add rows for CXX26 and GNUCXX26.
	(cpp_init_builtins): Set __cplusplus to 202400L for C++26.
	Set __cplusplus to 202302L for C++23.

gcc/testsuite/ChangeLog:

	* lib/target-supports.exp (check_effective_target_c++23): Return
	1 also if check_effective_target_c++26.
	(check_effective_target_c++23_down): New.
	(check_effective_target_c++26_only): New.
	(check_effective_target_c++26): New.
	* g++.dg/cpp23/cplusplus.C: Adjust expected value.
	* g++.dg/cpp26/cplusplus.C: New test.
</pre>
</div>
</content>
</entry>
<entry>
<title>Revert "[PATCH] libcpp: suppress builtin macro redefined warnings for __LINE__"</title>
<updated>2023-04-30T23:12:19+00:00</updated>
<author>
<name>Jeff Law</name>
<email>jlaw@ventanamicro</email>
</author>
<published>2023-04-30T23:12:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=33b6b7919763d939a153fe6f4aa3250c107605ee'/>
<id>33b6b7919763d939a153fe6f4aa3250c107605ee</id>
<content type='text'>
This reverts commit e7ce7c4905fd254760b1cd187752a03bc0c148ba.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit e7ce7c4905fd254760b1cd187752a03bc0c148ba.
</pre>
</div>
</content>
</entry>
<entry>
<title>[PATCH] libcpp: suppress builtin macro redefined warnings for __LINE__</title>
<updated>2023-04-30T18:28:06+00:00</updated>
<author>
<name>Longjun Luo</name>
<email>luolongjuna@gmail.com</email>
</author>
<published>2023-04-30T18:28:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=e7ce7c4905fd254760b1cd187752a03bc0c148ba'/>
<id>e7ce7c4905fd254760b1cd187752a03bc0c148ba</id>
<content type='text'>
From 0821df518b264e754d698d399f98be1a62945e32 Mon Sep 17 00:00:00 2001
From: Longjun Luo &lt;luolongjuna@gmail.com&gt;
Date: Thu, 12 Jan 2023 23:59:54 +0800
Subject: [PATCH] libcpp: suppress builtin macro redefined warnings for
 __LINE__

As implied in
gcc.gnu.org/legacy-ml/gcc-patches/2008-09/msg00076.html,
gcc provides -Wno-builtin-macro-redefined to suppress warning when
redefining builtin macro. However, at that time, there was no
scenario for __LINE__ macro.

But, when we try to build a live-patch, we compare sections by using
-ffunction-sections. Some same functions are considered changed because
of __LINE__ macro.

At present, to detect such a changed caused by __LINE__ macro, we
have to analyse code and maintain a function list. For example,
in kpatch, check this commit
github.com/dynup/kpatch/commit/0e1b95edeafa36edb7bcf11da6d1c00f76d7e03d.

So, in this scenario, when we try to compared sections, it would
be better to support suppress builtin macro redefined warnings for
__LINE__ macro.

libcpp:
	* init.cc (builtin_array): Do not always warn for a redefinition
	of __LINE__.

gcc/testsuite

	* gcc.dg/builtin-redefine.c: Test for redefintion warnings
	for __LINE__.
	* gcc.dg/builtin-redefine-1.c: New test.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
From 0821df518b264e754d698d399f98be1a62945e32 Mon Sep 17 00:00:00 2001
From: Longjun Luo &lt;luolongjuna@gmail.com&gt;
Date: Thu, 12 Jan 2023 23:59:54 +0800
Subject: [PATCH] libcpp: suppress builtin macro redefined warnings for
 __LINE__

As implied in
gcc.gnu.org/legacy-ml/gcc-patches/2008-09/msg00076.html,
gcc provides -Wno-builtin-macro-redefined to suppress warning when
redefining builtin macro. However, at that time, there was no
scenario for __LINE__ macro.

But, when we try to build a live-patch, we compare sections by using
-ffunction-sections. Some same functions are considered changed because
of __LINE__ macro.

At present, to detect such a changed caused by __LINE__ macro, we
have to analyse code and maintain a function list. For example,
in kpatch, check this commit
github.com/dynup/kpatch/commit/0e1b95edeafa36edb7bcf11da6d1c00f76d7e03d.

So, in this scenario, when we try to compared sections, it would
be better to support suppress builtin macro redefined warnings for
__LINE__ macro.

libcpp:
	* init.cc (builtin_array): Do not always warn for a redefinition
	of __LINE__.

gcc/testsuite

	* gcc.dg/builtin-redefine.c: Test for redefintion warnings
	for __LINE__.
	* gcc.dg/builtin-redefine-1.c: New test.
</pre>
</div>
</content>
</entry>
<entry>
<title>Update copyright years.</title>
<updated>2023-01-16T10:52:17+00:00</updated>
<author>
<name>Jakub Jelinek</name>
<email>jakub@redhat.com</email>
</author>
<published>2023-01-16T10:50:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=83ffe9cde7fe0b4deb0d1b54175fd9b19c38179c'/>
<id>83ffe9cde7fe0b4deb0d1b54175fd9b19c38179c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
