53 Commits

Author SHA1 Message Date
Jakub Jelinek
254a858ae7 Update copyright years. 2026-01-02 09:56:11 +01:00
Jakub Jelinek
4e44fe4280 c++: C++26 va_start - part of P3348R4 - C++26 should refer to C23 not C17
The C++26 https://wg21.link/P3348R4 C++26 should refer to C23 not C17
paper among other things changes va_start macro in the similar way
how C23 has changed it.  Now, unlike C17 and older, C++ has since forever
allowed int (...) but just one wasn't able to use va_start/va_arg/va_end
in such functions.
With the current C++26 draft wording, we'd have to
  #define va_start(V, ...) __builtin_va_start (V, 0)
like we've used for C23 before the PR107980 change.
But Jonathan has kindly filed
https://cplusplus.github.io/LWG/issue4388
which similarly to C23 will if accepted allow to define it as
  #define va_start(...) __builtin_c23_va_start(__VA_ARGS__)
and let the compiler diagnose undesirable cases (see stdarg6.C
testcase in the patch for what it can diagnose, basically anything
that isn't either va_start (ap) or va_start (ap, i) where i is the
last argument's identifier).  This patch implements what assumes
LWG4388 will pass.

It also defines
  #define __STDC_VERSION_STDARG_H__ 202311L
also for C++26.

The hardest part is actually something different.
C23 had to differentiate between C99 void foo (); i.e. unspecified
arguments (but not stdarg) and the new C23 void bar (...); which
is stdarg, but in both cases TYPE_ARG_TYPES (fntype) is NULL.
This has been implemented through the new TYPE_NO_NAMED_ARGS_STDARG_P
flag, fntypes with that flag set are considered stdarg_p and allow
va_start in those, while fntypes with NULL TYPE_ARG_TYPES but the
flag cleared are not stdarg_p, can accept any number of arguments
but can't use va_start.
So, I had to change various places in the C++ FE to pass true
as the third argument to build_function_type for calls which are
meant to be (...) so that one can actually use va_start in those.
Done only for C++26 in order not to disturb older versions too much.
And there is a problem with some of the builtins and #pragma weak
which are using (...) declarations more in the sense of C17
unspecified arguments rather than this call has variable arguments.

So, structural_comptypes now considers the non-C++26 (...) used
for selected builtins and #pragma weak incompatible with C++26 (...)
to avoid ICEs.

2025-10-09  Jakub Jelinek  <jakub@redhat.com>

gcc/
	* ginclude/stdarg.h (va_start): Use __builtin_c23_va_start
	also for C++26.
	(__STDC_VERSION_STDARG_H__): Also define for C++26.
gcc/c-family/
	* c-common.h (D_CXX26): Define.
	* c-common.cc (c_common_resword): Add D_CXX26 to
	__builtin_c23_va_start flags, mention D_CXX26 in comment.
gcc/cp/
	* cp-tree.h (cp_build_function_type): Declare.
	* lex.cc: Implement va_start changes from P3348R4 - C++26 should
	refer to C23 not C17 paper.
	(init_reswords): Set D_CXX26 in mask for C++23 and older.
	* parser.cc (cp_parser_primary_expression): Handle RID_C23_VA_START.
	(cp_parser_builtin_c23_va_start): New function.
	* cp-objcp-common.cc (names_builtin_p): Likewise.
	* decl.cc (grokfndecl, check_function_type): Pass
	TYPE_NO_NAMED_ARGS_STDARG_P as last arg to build_function_type.
	(grokdeclarator, static_fn_type): Use cp_build_function_type instead
	of build_function_type.
	* typeck.cc (merge_types): Likewise.
	(structural_comptypes): Return false for TYPE_NO_NAMED_ARGS_STDARG_P
	differences.
	* lambda.cc (maybe_add_lambda_conv_op): Use cp_build_function_type
	instead of build_function_type.
	* tree.cc (cp_build_function_type): New function.
	(strip_typedefs): Pass TYPE_NO_NAMED_ARGS_STDARG_P as last arg to
	build_function_type.
	* name-lookup.cc (push_local_extern_decl_alias): Likewise.
	* module.cc (trees_in::tree_node): Use cp_build_function_type instead
	of build_function_type.
	* pt.cc (copy_default_args_to_explicit_spec,
	rebuild_function_or_method_type, build_deduction_guide): Likewise.
	(alias_ctad_tweaks): Pass TYPE_NO_NAMED_ARGS_STDARG_P as last arg to
	build_function_type.
	* decl2.cc (change_return_type, cp_reconstruct_complex_type):
	Likewise.
gcc/testsuite/
	* c-c++-common/cpp/has-builtin-4.c: Expect
	__has_builtin (__builtin_c23_va_start) == 1 also for C++26.
	* c-c++-common/Wvarargs.c (foo3): Don't expect undefined behavior
	warning for C++26.
	* g++.dg/cpp26/stdarg1.C: New test.
	* g++.dg/cpp26/stdarg2.C: New test.
	* g++.dg/cpp26/stdarg3.C: New test.
	* g++.dg/cpp26/stdarg4.C: New test.
	* g++.dg/cpp26/stdarg5.C: New test.
	* g++.dg/cpp26/stdarg6.C: New test.
	* g++.dg/cpp26/stdarg7.C: New test.
	* g++.dg/cpp26/stdarg8.C: New test.
	* g++.dg/cpp26/stdarg9.C: New test.
	* g++.dg/opt/pr60849.C (foo): Add explicit cast.
2025-10-09 22:41:30 +02:00
Nathaniel Shead
cc79849cc8 c++: Fix canonical type for lambda pack captures [PR122015]
comp_template_parms_position uses whether a TEMPLATE_TYPE_PARM is a pack
to determine equivalency.  This in turn affects whether
canonical_type_parameter finds a pre-existing auto type as equivalent.

When generating the 'auto...' type for a lambda pack capture, we only
mark it as a pack after generating the node (and calculating its
canonical); this means that later when comparing a version streamed in
from a module we think that two equivalent types have different
TYPE_CANONICAL, because the latter already had
TEMPLATE_PARM_PARAMETER_PACK set before calculating its canonical.

This patch fixes this by using a new 'make_auto_pack' function to ensure
that packness is set before the canonical is looked up.

	PR c++/122015

gcc/cp/ChangeLog:

	* cp-tree.h (make_auto_pack): Declare.
	* lambda.cc (lambda_capture_field_type): Use make_auto_pack to
	ensure TYPE_CANONICAL is set correctly.
	* pt.cc (make_auto_pack): New function.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/lambda-11.h: New test.
	* g++.dg/modules/lambda-11_a.H: New test.
	* g++.dg/modules/lambda-11_b.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Patrick Palka <ppalka@redhat.com>
2025-09-23 09:25:00 +10:00
Eczbek
fa71e855ab c++: Fix lambdas with variadic parameters and static specifier [PR119048]
PR c++/119048

gcc/cp/ChangeLog:

	* lambda.cc (compare_lambda_sig): Only skip first parameter for
	object members.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp23/static-operator-call8.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2025-09-20 15:09:56 +01:00
Marek Polacek
d2dccd1bf7 c++: P2036R3 - Change scope of lambda trailing-return-type [PR102610]
This patch is an attempt to implement P2036R3 along with P2579R0, fixing
build breakages caused by P2036R3.

The simplest example is:

  auto counter1 = [j=0]() mutable -> decltype(j) {
      return j++;
  };

which currently doesn't compile because the 'j' in the capture isn't
visible in the trailing return type.  With these proposals, the 'j'
will be in a lambda scope which spans the trailing return type, so
this test will compile.

This oughtn't be difficult but decltype and other issues made this patch
much more challenging.

We have to push the explicit captures before going into
_lambda_declarator_opt because that is what parses the trailing return
type.  Yet we can't build any captures until after _lambda_body ->
start_lambda_function which creates the lambda's operator(), without
which we can't build a proxy, but _lambda_body happens only after
parsing the declarator.  This patch works around it by creating a fake
operator() and adding it to the capture and then removing it when we
have the real operator().

Another thing is that in "-> decltype(j)" we don't have the right
current_function_decl yet.  If current_lambda_expr gives us a lambda,
we know this decltype appertains to a lambda.  But we have to know if we
are in a parameter-declaration-clause: as per [expr.prim.id.unqual]/4.4,
if we are, we shouldn't be adding "const".  The new LAMBDA_EXPR_CONST_QUAL_P
flag tracks this.  But it doesn't handle nested lambdas yet, specifically,
[expr.prim.id.unqual]/14.

I don't think this patch changes behavior for the tests in
"capture-default with [=]" as the paper promises; clang++ behaves the
same as gcc with this patch.

	PR c++/102610

gcc/cp/ChangeLog:

	* cp-tree.h (LAMBDA_EXPR_CONST_QUAL_P): Define.
	(maybe_add_dummy_lambda_op): Declare.
	(remove_dummy_lambda_op): Declare.
	(push_capture_proxies): Adjust.
	* lambda.cc (build_capture_proxy): No longer static.  New early_p
	parameter.  Use it.
	(add_capture): Adjust the call to build_capture_proxy.
	(resolvable_dummy_lambda): Check DECL_LAMBDA_FUNCTION_P.
	(push_capture_proxies): New.
	(start_lambda_function): Use it.
	* name-lookup.cc (check_local_shadow): Give an error for
	is_capture_proxy.
	(cp_binding_level_descriptor): Add lambda-scope.
	(begin_scope) <case sk_lambda>: New case.
	* name-lookup.h (enum scope_kind): Add sk_lambda.
	(struct cp_binding_level): Widen kind.
	* parser.cc (cp_parser_lambda_expression): Create a new (lambda) scope
	after the lambda-introducer.
	(cp_parser_lambda_declarator_opt): Set LAMBDA_EXPR_CONST_QUAL_P.
	Create a dummy operator() if needed.  Inject the captures into the
	lambda scope.  Remove the dummy operator().
	(make_dummy_lambda_op): New.
	(maybe_add_dummy_lambda_op): New.
	(remove_dummy_lambda_op): New.
	* pt.cc (tsubst_lambda_expr): Begin/end a lambda scope.  Push the
	capture proxies.  Build/remove a dummy operator() if needed.  Set
	LAMBDA_EXPR_CONST_QUAL_P.
	* semantics.cc (parsing_lambda_declarator): New.
	(outer_var_p): Also consider captures as outer variables if in a lambda
	declarator.
	(process_outer_var_ref): Reset containing_function when
	parsing_lambda_declarator.
	(finish_decltype_type): Process decls in the lambda-declarator as well.
	Look at LAMBDA_EXPR_CONST_QUAL_P unless we have an xobj function.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/lambda/lambda-decltype3.C: Remove xfail.
	* g++.dg/warn/Wshadow-19.C: Add -Wpedantic.  Adjust a dg-warning.
	* g++.dg/warn/Wshadow-6.C: Adjust expected diagnostics.
	* g++.dg/cpp23/lambda-scope1.C: New test.
	* g++.dg/cpp23/lambda-scope2.C: New test.
	* g++.dg/cpp23/lambda-scope3.C: New test.
	* g++.dg/cpp23/lambda-scope4.C: New test.
	* g++.dg/cpp23/lambda-scope4b.C: New test.
	* g++.dg/cpp23/lambda-scope5.C: New test.
	* g++.dg/cpp23/lambda-scope6.C: New test.
	* g++.dg/cpp23/lambda-scope7.C: New test.
	* g++.dg/cpp23/lambda-scope8.C: New test.
	* g++.dg/cpp23/lambda-scope9.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2025-08-13 18:49:30 -04:00
Marek Polacek
d46d8267b5 c++: consteval blocks
This patch implements consteval blocks, as specified by P2996.
They aren't very useful without define_aggregate, but having
a reviewed implementation on trunk would be great.

consteval {} can be anywhere where a member-declaration or
block-declaration can be.  The expression corresponding to it is:

  [] -> void static consteval compound-statement ()

and it must be a constant expression.

I've used cp_parser_lambda_expression to take care of most of the
parsing.  Since a consteval block can find itself in a template, we
need a vehicle to carry the block for instantiation.  Rather than
inventing a new tree, I'm using STATIC_ASSERT.

A consteval block can't return a value but that is checked by virtue
of the lambda having a void return type.

	PR c++/120775

gcc/cp/ChangeLog:

	* constexpr.cc (cxx_eval_outermost_constant_expr): Use
	extract_call_expr.
	* cp-tree.h (CONSTEVAL_BLOCK_P, LAMBDA_EXPR_CONSTEVAL_BLOCK_P): Define.
	(finish_static_assert): Adjust declaration.
	(current_nonlambda_function): Likewise.
	* lambda.cc (current_nonlambda_function): New parameter.  Only keep
	iterating if the function represents a consteval block.
	* parser.cc (cp_parser_lambda_expression): New parameter for
	consteval blocks.  Use it.  Set LAMBDA_EXPR_CONSTEVAL_BLOCK_P.
	(cp_parser_lambda_declarator_opt): Likewise.
	(build_empty_string): New.
	(cp_parser_next_tokens_are_consteval_block_p): New.
	(cp_parser_consteval_block): New.
	(cp_parser_block_declaration): Handle consteval blocks.
	(cp_parser_static_assert): Use build_empty_string.
	(cp_parser_member_declaration): Handle consteval blocks.
	* pt.cc (tsubst_stmt): Adjust a call to finish_static_assert.
	* semantics.cc (finish_fname): Warn for consteval blocks.
	(finish_static_assert): New parameter for consteval blocks.  Set
	CONSTEVAL_BLOCK_P.  Evaluate consteval blocks specially.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp26/consteval-block1.C: New test.
	* g++.dg/cpp26/consteval-block2.C: New test.
	* g++.dg/cpp26/consteval-block3.C: New test.
	* g++.dg/cpp26/consteval-block4.C: New test.
	* g++.dg/cpp26/consteval-block5.C: New test.
	* g++.dg/cpp26/consteval-block6.C: New test.
	* g++.dg/cpp26/consteval-block7.C: New test.
	* g++.dg/cpp26/consteval-block8.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2025-07-31 10:40:28 -04:00
Jason Merrill
eb59e58dcc c++: lambda convop in C++23 [PR114632]
The lambda conversion was ICEing for two C++23 features, static op() and
explicit object parameters.  The issue with the former seems like a more
general issue: tsubst_function_decl recursing to substitute the parameters
was affected by cp_unevaluated_operand from the decltype that refers to the
declaration.  Various places already make a point of clearing
cp_unevaluated_operand ahead of PARM_DECL tsubsting; doing it here makes the
PR101233 fix redundant.

For explicit object lambdas, we want to implement CWG2561 and
just not declare the conversion.

	PR c++/114632
	PR c++/101233

gcc/cp/ChangeLog:

	* lambda.cc (maybe_add_lambda_conv_op): Not for xobj lambda.
	* pt.cc (tsubst_function_decl): Add cp_evaluated.
	(alias_ctad_tweaks): Revert PR101233 fix.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp23/explicit-obj-lambda18.C: New test.
	* g++.dg/cpp23/static-operator-call7.C: New test.
2025-07-24 14:07:11 -04:00
Jakub Jelinek
bdb0a6be69 c++: Save 8 further bytes from lang_type allocations
The following patch implements the
/* FIXME reuse another field?  */
comment on the lambda_expr member.
I think (and asserts in the patch seem to confirm) CLASSTYPE_KEY_METHOD
is only ever non-NULL for TYE_POLYMORPHIC_P and on the other side
CLASSTYPE_LAMBDA_EXPR is only used on closure types which are never
polymorphic.

So, the patch just uses one member for both, with the accessor macros
changed to be no longer lvalues and adding SET_* variants of the macros
for setters.

2025-07-11  Jakub Jelinek  <jakub@redhat.com>

	* cp-tree.h (struct lang_type): Add comment before key_method.
	Remove lambda_expr.
	(CLASSTYPE_KEY_METHOD): Give NULL_TREE if not TYPE_POLYMORPHIC_P.
	(SET_CLASSTYPE_KEY_METHOD): Define.
	(CLASSTYPE_LAMBDA_EXPR): Give NULL_TREE if TYPE_POLYMORPHIC_P.
	Use key_method member instead of lambda_expr.
	(SET_CLASSTYPE_LAMBDA_EXPR): Define.
	* class.cc (determine_key_method): Use SET_CLASSTYPE_KEY_METHOD
	macro.
	* decl.cc (xref_tag): Use SET_CLASSTYPE_LAMBDA_EXPR macro.
	* lambda.cc (begin_lambda_type): Likewise.
	* module.cc (trees_in::read_class_def): Use SET_CLASSTYPE_LAMBDA_EXPR
	and SET_CLASSTYPE_KEY_METHOD macros, assert lambda is NULL if
	TYPE_POLYMORPHIC_P and otherwise assert key_method is NULL.
2025-07-11 00:05:23 +02:00
Jason Merrill
387cc9f80f c++: trivial lambda pruning [PR120716]
In this testcase there is nothing in the lambda except a static_assert which
mentions a variable from the enclosing scope but does not odr-use it, so we
want prune_lambda_captures to remove its capture.  Since the lambda is so
empty, there's nothing in the body except the DECL_EXPR of the capture
proxy, so pop_stmt_list moves that into the enclosing STATEMENT_LIST and
passes the 'body' STATEMENT_LIST to free_stmt_list.  As a result, passing
'body' to prune_lambda_captures is wrong; we should instead pass the
enclosing scope, i.e. cur_stmt_list.

	PR c++/120716

gcc/cp/ChangeLog:

	* lambda.cc (finish_lambda_function): Pass cur_stmt_list to
	prune_lambda_captures.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/lambda/lambda-constexpr3.C: New test.
	* g++.dg/cpp0x/lambda/lambda-constexpr3a.C: New test.
2025-07-03 18:54:28 -04:00
Jason Merrill
e9549b5ee8 c++: ICE with 'this' in lambda signature [PR120748]
This testcase was crashing from infinite recursion in the diagnostic
machinery, trying to print the lambda signature, which referred to the
__this capture field in the lambda, which wanted to print the lambda again.

But we don't want the signature to refer to the capture field; 'this' in an
unevaluated context refers to the 'this' from the enclosing function, not
the capture.

After fixing that, we still wrongly rejected the B case because
THIS_FORBIDDEN is set in a default (template) argument.  Since we don't
distinguish between THIS_FORBIDDEN being set for a default argument and it
being set for a static member function, let's just ignore it if
cp_unevaluated_operand; we'll give a better diagnostic for the static memfn
case in finish_this_expr.

	PR c++/120748

gcc/cp/ChangeLog:

	* lambda.cc (lambda_expr_this_capture): Don't return a FIELD_DECL.
	* parser.cc (cp_parser_primary_expression): Ignore THIS_FORBIDDEN
	if cp_unevaluated_operand.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/lambda-targ16.C: New test.
	* g++.dg/cpp0x/this1.C: Adjust diagnostics.
2025-07-03 18:54:01 -04:00
Jason Merrill
611d59589d c++: more xobj lambda 'this' capture [PR113563]
Nathaniel shared a more extensive test, which revealed more needed fixes.

	PR c++/113563

gcc/cp/ChangeLog:

	* lambda.cc (lambda_capture_field_type): Handle 'this' normally.
	(build_capture_proxy): Special-case 'this' by-ref capture more.
	(nonlambda_method_basetype): Look through xobj lambdas.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp23/explicit-obj-lambda17.C: New test.
2025-05-30 13:14:32 -04:00
Jason Merrill
2047aa4ce2 c++: xobj lambda 'this' capture [PR113563]
Various places were still making assumptions that we could get to the 'this'
capture through current_class_ref in a lambda op(), which is incorrect for
an explicit object op().

	PR c++/113563

gcc/cp/ChangeLog:

	* lambda.cc (build_capture_proxy): Check pointerness of the
	member, not the proxy type.
	(lambda_expr_this_capture): Don't assume current_class_ref.
	(nonlambda_method_basetype): Likewise.
	* semantics.cc (finish_non_static_data_member): Don't assume
	TREE_TYPE (object) is set.
	(finish_this_expr): Check current_class_type for lambda,
	not current_class_ref.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp23/explicit-obj-lambda16.C: New test.
2025-05-29 16:21:17 -04:00
Jason Merrill
44e31eb265 c++: pruning non-captures in noexcept lambda [PR119764]
The patch for PR87185 fixed the ICE without fixing the underlying problem,
that we were failing to find the declaration of the capture proxy that we
are trying to decide whether to prune.  Fixed by looking at the right index
in stmt_list_stack.

Since this changes captures, it changes the ABI of noexcept lambdas; we
haven't worked hard to maintain lambda capture ABI, but it's easy enough to
control here.

	PR c++/119764
	PR c++/87185

gcc/cp/ChangeLog:

	* lambda.cc (insert_capture_proxy): Handle noexcept lambda.
	(prune_lambda_captures): Likewise, in ABI v21.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/lambda/lambda-noexcept1.C: New test.
2025-04-25 11:51:07 -04:00
Nathaniel Shead
a6f4178d0d c++: Prune lambda captures from more places [PR119755]
Currently, pruned lambda captures are still leftover in the function's
BLOCK and topmost BIND_EXPR; this doesn't cause any issues for normal
compilation, but does break modules streaming as we try to reconstruct a
FIELD_DECL that no longer exists on the type itself.

	PR c++/119755

gcc/cp/ChangeLog:

	* lambda.cc (prune_lambda_captures): Remove pruned capture from
	function's BLOCK_VARS and BIND_EXPR_VARS.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/lambda-10_a.H: New test.
	* g++.dg/modules/lambda-10_b.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
2025-04-16 09:24:00 +10:00
Jason Merrill
25992d8daf c++: lambda in requires outside template [PR99546]
Since r10-7441 we set processing_template_decl in a requires-expression so
that we can use tsubst_expr to evaluate the requirements, but that confuses
lambdas terribly; begin_lambda_type silently returns error_mark_node and we
continue into other failures.  This patch clears processing_template_decl
again while we're defining the closure and op() function, so it only remains
set while parsing the introducer (i.e. any init-captures) and building the
resulting object.  This properly avoids trying to create another lambda in
tsubst_lambda_expr.

	PR c++/99546
	PR c++/113925
	PR c++/106976
	PR c++/109961
	PR c++/117336

gcc/cp/ChangeLog:

	* lambda.cc (build_lambda_object): Handle fake
	requires-expr processing_template_decl.
	* parser.cc (cp_parser_lambda_expression): Likewise.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/lambda-requires2.C: New test.
	* g++.dg/cpp2a/lambda-requires3.C: New test.
	* g++.dg/cpp2a/lambda-requires4.C: New test.
	* g++.dg/cpp2a/lambda-requires5.C: New test.
2025-04-04 15:40:08 -04:00
Simon Martin
90e53ecdbf c++: Look through capture proxy from outer lambda instead of erroring out [PR110584]
We've been rejecting this valid code since r8-4571:

=== cut here ===
void foo (float);
int main () {
  constexpr float x = 0;
  (void) [&] () {
    foo (x);
    (void) [] () {
      foo (x);
    };
  };
}
=== cut here ===

The problem is that when processing X in the inner lambda,
process_outer_var_ref errors out even though it does find the constant
capture from the enclosing lambda.

This patch makes sure that process_outer_var_ref properly looks through
normal capture proxies, if any.

	PR c++/110584

gcc/cp/ChangeLog:

	* cp-tree.h (strip_normal_capture_proxy): Declare.
	* lambda.cc (strip_normal_capture_proxy): New function to look
	through normal capture proxies.
	(build_capture_proxy): Use it.
	* semantics.cc (process_outer_var_ref): Likewise.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/lambda/lambda-nested10.C: New test.
2025-03-12 20:16:01 +01:00
Patrick Palka
1a150f1f68 c++: generic lambda, implicit 'this' capture, xobj memfn [PR119038]
When a generic lambda calls an overload set containing an iobj member
function we speculatively capture 'this'.  We need to do the same
for an xobj member function.

	PR c++/119038

gcc/cp/ChangeLog:

	* lambda.cc (maybe_generic_this_capture): Consider xobj
	member functions as well, not just iobj.  Update function
	comment.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp23/explicit-obj-lambda15.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2025-02-28 10:56:49 -05:00
Nathaniel Shead
8caf67eea7 c++: Clear lambda scope for unattached member template lambdas
In r15-7202 we made lambdas between a template parameter scope and a
class/function/initializer be considered TU-local, in lieu of working
out how to mangle them to the succeeding declaration.

I neglected to clear any existing mangling on the template declaration
however; this means that such lambdas can occasionally get a lambda
scope, and will in general inherit the lambda scope of their
instantiation context (whatever that might be).

This patch ensures that the scope is cleared on the template declaration
as well.

gcc/cp/ChangeLog:

	* lambda.cc (record_lambda_scope): Clear mangling scope for
	otherwise unattached lambdas in class member templates.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/lambda-uneval22.C: Add check that the primary
	specialisation of the lambda is TU-local.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
2025-02-14 12:14:52 +11:00
Nathaniel Shead
12feb78be5 c++: Fix mangling of lambas in static member template initializers [PR107741]
My fix for this issue in r15-7147 turns out to not be quite sufficient;
static member templates apparently go down a different code path and
need their own handling.

	PR c++/107741

gcc/cp/ChangeLog:

	* cp-tree.h (is_static_data_member_initialized_in_class):
	Declare new predicate.
	* decl2.cc (start_initialized_static_member): Push the
	TEMPLATE_DECL when appropriate.
	(is_static_data_member_initialized_in_class): New predicate.
	(finish_initialized_static_member): Use it.
	* lambda.cc (record_lambda_scope): Likewise.
	* parser.cc (cp_parser_init_declarator): Start the member decl
	early for static members so that lambda scope is set.
	(cp_parser_template_declaration_after_parameters): Don't
	register in-class initialized static members here.

gcc/testsuite/ChangeLog:

	* g++.dg/abi/lambda-ctx2-19.C: Add tests for template members.
	* g++.dg/abi/lambda-ctx2-19vs20.C: Likewise.
	* g++.dg/abi/lambda-ctx2-20.C: Likewise.
	* g++.dg/abi/lambda-ctx2.h: Likewise.
	* g++.dg/cpp0x/static-member-init-1.C: Likewise.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
2025-02-14 12:14:15 +11:00
Jakub Jelinek
4b2726a62d c++: Fix up pedwarn for capturing structured bindings in lambdas [PR118719]
As mentioned in the PR, this pedwarni is desirable for the implicit or
explicit capturing of structured bindings in C++17, but in the case of
init-captures the initializer is just some expression and that can include
structured bindings.

So, the following patch limits the warning to non-explicit_init_p.

2025-02-04  Jakub Jelinek  <jakub@redhat.com>

	PR c++/118719
	* lambda.cc (add_capture): Only pedwarn about capturing structured
	binding if !explicit_init_p.

	* g++.dg/cpp1z/decomp63.C: New test.
2025-02-04 09:24:06 +01:00
Marek Polacek
6d8a0e8b2c c++: bogus error with nested lambdas [PR117602]
The error here should also check that we aren't nested in another
lambda; in it, at_function_scope_p() will be false.

	PR c++/117602

gcc/cp/ChangeLog:

	* cp-tree.h (current_nonlambda_scope): Add a default argument.
	* lambda.cc (current_nonlambda_scope): New bool parameter.  Use it.
	* parser.cc (cp_parser_lambda_introducer): Use current_nonlambda_scope
	to check if the lambda is non-local.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/lambda-uneval21.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2025-01-23 17:13:08 -05:00
Nathaniel Shead
685c458fb4 c++: Fix mangling of lambdas in static data member initializers [PR107741]
This fixes an issue where lambdas declared in the initializer of a
static data member within the class body do not get a mangling scope of
that variable; this results in mangled names that do not conform to the
ABI spec.

To do this, the patch splits up grokfield for this case specifically,
allowing a declaration to be build and used in start_lambda_scope before
parsing the initializer, so that record_lambda_scope works correctly.

As a drive-by, this also fixes the issue of a static member not being
visible within its own initializer.

	PR c++/107741

gcc/c-family/ChangeLog:

	* c-opts.cc (c_common_post_options): Bump ABI version.

gcc/ChangeLog:

	* common.opt: Add -fabi-version=20.
	* doc/invoke.texi: Likewise.

gcc/cp/ChangeLog:

	* cp-tree.h (start_initialized_static_member): Declare.
	(finish_initialized_static_member): Declare.
	* decl2.cc (start_initialized_static_member): New function.
	(finish_initialized_static_member): New function.
	* lambda.cc (record_lambda_scope): Support falling back to old
	ABI (maybe with warning).
	* parser.cc (cp_parser_member_declaration): Build decl early
	when parsing an initialized static data member.

gcc/testsuite/ChangeLog:

	* g++.dg/abi/macro0.C: Bump ABI version.
	* g++.dg/abi/mangle74.C: Remove XFAILs.
	* g++.dg/other/fold1.C: Restore originally raised error.
	* g++.dg/abi/lambda-ctx2-19.C: New test.
	* g++.dg/abi/lambda-ctx2-19vs20.C: New test.
	* g++.dg/abi/lambda-ctx2-20.C: New test.
	* g++.dg/abi/lambda-ctx2.h: New test.
	* g++.dg/cpp0x/static-member-init-1.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
2025-01-23 17:38:07 +11:00
Patrick Palka
303cc73182 c++: 'this' capture clobbered during recursive inst [PR116756]
Here during instantiation of generic lambda's op() [with I = 0] we
substitute into the call self(self, cst<1>{}) which requires recursive
instantiation of the same op() [with I = 1] (which isn't deferred due to
lambda's deduced return type.  During this recursive instantiation, the
DECL_EXPR case of tsubst_stmt clobbers LAMBDA_EXPR_THIS_CAPTURE to point
to the child op()'s specialized capture proxy instead of the parent's,
and the original value is never restored.

So later when substituting into the openSeries call in the parent op()
maybe_resolve_dummy uses the 'this' proxy belonging to the child op(),
which leads to a context mismatch ICE during gimplification of the
proxy.

An earlier version of this patch fixed this by making instantiate_body
save/restore LAMBDA_EXPR_THIS_CAPTURE during a lambda op() instantiation.
But it seems cleaner to avoid overwriting LAMBDA_EXPR_THIS_CAPTURE in the
first place by making it point to the non-specialized capture proxy, and
instead call retrieve_local_specialization as needed, which is what this
patch implements.  It's natural then to not clear LAMBDA_EXPR_THIS_CAPTURE
after parsing/regenerating a lambda.

	PR c++/116756

gcc/cp/ChangeLog:

	* lambda.cc (lambda_expr_this_capture): Call
	retrieve_local_specialization on the result of
	LAMBDA_EXPR_THIS_CAPTURE for a generic lambda.
	* parser.cc (cp_parser_lambda_expression): Don't clear
	LAMBDA_EXPR_THIS_CAPTURE.
	* pt.cc (tsubst_stmt) <case DECL_EXPR>: Don't overwrite
	LAMBDA_EXPR_THIS_CAPTURE with the specialized capture.
	(tsubst_lambda_expr): Don't clear LAMBDA_EXPR_THIS_CAPTURE
	afterward.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/constexpr-if-lambda7.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2025-01-21 21:57:02 -05:00
Jakub Jelinek
6441eb6dc0 Update copyright years. 2025-01-02 11:59:57 +01:00
Andrew Pinski
b3f1b9e2aa build: Remove INCLUDE_MEMORY [PR117737]
Since diagnostic.h is included in over half of the sources, requiring to `#define INCLUDE_MEMORY`
does not make sense. Instead lets unconditionally include memory in system.h.

The majority of this patch is just removing `#define INCLUDE_MEMORY` from the sources which currently
have it.

This should also fix the mingw build issue but I have not tried it.

Bootstrapped and tested on x86_64-linux-gnu.

	PR bootstrap/117737
gcc/ada/ChangeLog:

	* gcc-interface/misc.cc (INCLUDE_MEMORY): Remove.
	* gcc-interface/trans.cc (INCLUDE_MEMORY): Remove.
	* gcc-interface/utils.cc (INCLUDE_MEMORY): Remove.

gcc/analyzer/ChangeLog:

	* access-diagram.cc (INCLUDE_MEMORY): Remove.
	* analysis-plan.cc (INCLUDE_MEMORY): Remove.
	* analyzer-language.cc (INCLUDE_MEMORY): Remove.
	* analyzer-logging.cc (INCLUDE_MEMORY): Remove.
	* analyzer-pass.cc (INCLUDE_MEMORY): Remove.
	* analyzer-selftests.cc (INCLUDE_MEMORY): Remove.
	* analyzer.cc (INCLUDE_MEMORY): Remove.
	* bar-chart.cc (INCLUDE_MEMORY): Remove.
	* bounds-checking.cc (INCLUDE_MEMORY): Remove.
	* call-details.cc (INCLUDE_MEMORY): Remove.
	* call-info.cc (INCLUDE_MEMORY): Remove.
	* call-string.cc (INCLUDE_MEMORY): Remove.
	* call-summary.cc (INCLUDE_MEMORY): Remove.
	* checker-event.cc (INCLUDE_MEMORY): Remove.
	* checker-path.cc (INCLUDE_MEMORY): Remove.
	* complexity.cc (INCLUDE_MEMORY): Remove.
	* constraint-manager.cc (INCLUDE_MEMORY): Remove.
	* diagnostic-manager.cc (INCLUDE_MEMORY): Remove.
	* engine.cc (INCLUDE_MEMORY): Remove.
	* feasible-graph.cc (INCLUDE_MEMORY): Remove.
	* infinite-loop.cc (INCLUDE_MEMORY): Remove.
	* infinite-recursion.cc (INCLUDE_MEMORY): Remove.
	* kf-analyzer.cc (INCLUDE_MEMORY): Remove.
	* kf-lang-cp.cc (INCLUDE_MEMORY): Remove.
	* kf.cc (INCLUDE_MEMORY): Remove.
	* known-function-manager.cc (INCLUDE_MEMORY): Remove.
	* pending-diagnostic.cc (INCLUDE_MEMORY): Remove.
	* program-point.cc (INCLUDE_MEMORY): Remove.
	* program-state.cc (INCLUDE_MEMORY): Remove.
	* ranges.cc (INCLUDE_MEMORY): Remove.
	* record-layout.cc (INCLUDE_MEMORY): Remove.
	* region-model-asm.cc (INCLUDE_MEMORY): Remove.
	* region-model-manager.cc (INCLUDE_MEMORY): Remove.
	* region-model-reachability.cc (INCLUDE_MEMORY): Remove.
	* region-model.cc (INCLUDE_MEMORY): Remove.
	* region.cc (INCLUDE_MEMORY): Remove.
	* sm-fd.cc (INCLUDE_MEMORY): Remove.
	* sm-file.cc (INCLUDE_MEMORY): Remove.
	* sm-malloc.cc (INCLUDE_MEMORY): Remove.
	* sm-pattern-test.cc (INCLUDE_MEMORY): Remove.
	* sm-sensitive.cc (INCLUDE_MEMORY): Remove.
	* sm-signal.cc (INCLUDE_MEMORY): Remove.
	* sm-taint.cc (INCLUDE_MEMORY): Remove.
	* sm.cc (INCLUDE_MEMORY): Remove.
	* state-purge.cc (INCLUDE_MEMORY): Remove.
	* store.cc (INCLUDE_MEMORY): Remove.
	* supergraph.cc (INCLUDE_MEMORY): Remove.
	* svalue.cc (INCLUDE_MEMORY): Remove.
	* symbol.cc (INCLUDE_MEMORY): Remove.
	* trimmed-graph.cc (INCLUDE_MEMORY): Remove.
	* varargs.cc (INCLUDE_MEMORY): Remove.

gcc/ChangeLog:

	* asan.cc (INCLUDE_MEMORY): Remove.
	* attribs.cc (INCLUDE_MEMORY): Remove.
	* auto-profile.cc (INCLUDE_MEMORY): Remove.
	* calls.cc (INCLUDE_MEMORY): Remove.
	* cfganal.cc (INCLUDE_MEMORY): Remove.
	* cfgexpand.cc (INCLUDE_MEMORY): Remove.
	* cfghooks.cc (INCLUDE_MEMORY): Remove.
	* cfgloop.cc (INCLUDE_MEMORY): Remove.
	* cgraph.cc (INCLUDE_MEMORY): Remove.
	* cgraphclones.cc (INCLUDE_MEMORY): Remove.
	* cgraphunit.cc (INCLUDE_MEMORY): Remove.
	* collect-utils.cc (INCLUDE_MEMORY): Remove.
	* collect2.cc (INCLUDE_MEMORY): Remove.
	* common/config/aarch64/aarch64-common.cc (INCLUDE_MEMORY): Remove.
	* common/config/arm/arm-common.cc (INCLUDE_MEMORY): Remove.
	* common/config/avr/avr-common.cc (INCLUDE_MEMORY): Remove.
	* config/aarch64/aarch64-cc-fusion.cc (INCLUDE_MEMORY): Remove.
	* config/aarch64/aarch64-early-ra.cc (INCLUDE_MEMORY): Remove.
	* config/aarch64/aarch64-sve-builtins.cc (INCLUDE_MEMORY): Remove.
	* config/aarch64/aarch64.cc (INCLUDE_MEMORY): Remove.
	* config/arc/arc.cc (INCLUDE_MEMORY): Remove.
	* config/arm/aarch-common.cc (INCLUDE_MEMORY) Remove.:
	* config/arm/arm-mve-builtins.cc (INCLUDE_MEMORY): Remove.
	* config/arm/arm.cc (INCLUDE_MEMORY): Remove.
	* config/avr/avr-devices.cc (INCLUDE_MEMORY): Remove.
	* config/avr/driver-avr.cc (INCLUDE_MEMORY): Remove.
	* config/bpf/bpf.cc (INCLUDE_MEMORY): Remove.
	* config/bpf/btfext-out.cc (INCLUDE_MEMORY): Remove.
	* config/bpf/core-builtins.cc (INCLUDE_MEMORY): Remove.
	* config/darwin.cc (INCLUDE_MEMORY): Remove.
	* config/gcn/mkoffload.cc (INCLUDE_MEMORY): Remove.
	* config/i386/driver-i386.cc (INCLUDE_MEMORY): Remove.
	* config/i386/i386-builtins.cc (INCLUDE_MEMORY): Remove.
	* config/i386/i386-expand.cc (INCLUDE_MEMORY): Remove.
	* config/i386/i386-features.cc (INCLUDE_MEMORY): Remove.
	* config/i386/i386-options.cc (INCLUDE_MEMORY): Remove.
	* config/i386/i386.cc (INCLUDE_MEMORY): Remove.
	* config/loongarch/loongarch-builtins.cc (INCLUDE_MEMORY): Remove.
	* config/loongarch/loongarch.cc (INCLUDE_MEMORY): Remove.
	* config/mingw/winnt-cxx.cc (INCLUDE_MEMORY): Remove.
	* config/mingw/winnt.cc (INCLUDE_MEMORY): Remove.
	* config/mips/mips.cc (INCLUDE_MEMORY): Remove.
	* config/msp430/driver-msp430.cc (INCLUDE_MEMORY): Remove.
	* config/nvptx/mkoffload.cc (INCLUDE_MEMORY): Remove.
	* config/nvptx/nvptx.cc (INCLUDE_MEMORY): Remove.
	* config/riscv/riscv-avlprop.cc (INCLUDE_MEMORY): Remove.
	* config/riscv/riscv-target-attr.cc (INCLUDE_MEMORY): Remove.
	* config/riscv/riscv-vector-builtins.cc (INCLUDE_MEMORY): Remove.
	* config/riscv/riscv-vector-costs.cc (INCLUDE_MEMORY): Remove.
	* config/riscv/riscv-vsetvl.cc (INCLUDE_MEMORY): Remove.
	* config/riscv/riscv.cc (INCLUDE_MEMORY): Remove.
	* config/rs6000/driver-rs6000.cc (INCLUDE_MEMORY): Remove.
	* config/rs6000/host-darwin.cc (INCLUDE_MEMORY): Remove.
	* config/rs6000/rs6000-c.cc (INCLUDE_MEMORY): Remove.
	* config/rs6000/rs6000.cc (INCLUDE_MEMORY): Remove.
	* config/s390/s390-c.cc (INCLUDE_MEMORY): Remove.
	* config/s390/s390.cc (INCLUDE_MEMORY): Remove.
	* config/sol2-cxx.cc (INCLUDE_MEMORY): Remove.
	* config/vms/vms-c.cc (INCLUDE_MEMORY): Remove.
	* config/xtensa/xtensa-dynconfig.cc (INCLUDE_MEMORY): Remove.
	* coroutine-passes.cc (INCLUDE_MEMORY): Remove.
	* coverage.cc (INCLUDE_MEMORY): Remove.
	* data-streamer-in.cc (INCLUDE_MEMORY): Remove.
	* data-streamer-out.cc (INCLUDE_MEMORY): Remove.
	* data-streamer.cc (INCLUDE_MEMORY): Remove.
	* diagnostic-format-json.cc (INCLUDE_MEMORY): Remove.
	* diagnostic-format-sarif.cc (INCLUDE_MEMORY): Remove.
	* diagnostic-format-text.cc (INCLUDE_MEMORY): Remove.
	* diagnostic-global-context.cc (INCLUDE_MEMORY): Remove.
	* diagnostic-macro-unwinding.cc (INCLUDE_MEMORY): Remove.
	* diagnostic-path.cc (INCLUDE_MEMORY): Remove.
	* diagnostic-show-locus.cc (INCLUDE_MEMORY): Remove.
	* diagnostic-spec.cc (INCLUDE_MEMORY): Remove.
	* diagnostic.cc (INCLUDE_MEMORY): Remove.
	* diagnostic.h: Remove check for INCLUDE_MEMORY.
	* digraph.cc (INCLUDE_MEMORY): Remove.
	* dumpfile.cc (INCLUDE_MEMORY): Remove.
	* dwarf2out.cc (INCLUDE_MEMORY): Remove.
	* edit-context.cc (INCLUDE_MEMORY): Remove.
	* except.cc (INCLUDE_MEMORY): Remove.
	* expr.cc (INCLUDE_MEMORY): Remove.
	* file-prefix-map.cc (INCLUDE_MEMORY): Remove.
	* final.cc (INCLUDE_MEMORY): Remove.
	* fwprop.cc (INCLUDE_MEMORY): Remove.
	* gcc-plugin.h (INCLUDE_MEMORY): Remove.
	* gcc-rich-location.cc (INCLUDE_MEMORY): Remove.
	* gcc-urlifier.cc (INCLUDE_MEMORY): Remove.
	* gcc.cc (INCLUDE_MEMORY): Remove.
	* gcov-dump.cc (INCLUDE_MEMORY): Remove.
	* gcov-tool.cc (INCLUDE_MEMORY): Remove.
	* gcov.cc (INCLUDE_MEMORY): Remove.
	* gengtype.cc (open_base_files): Don't print `#define INCLUDE_MEMORY`.
	* genmatch.cc (INCLUDE_MEMORY): Remove.
	* gimple-fold.cc (INCLUDE_MEMORY): Remove.
	* gimple-harden-conditionals.cc (INCLUDE_MEMORY): Remove.
	* gimple-harden-control-flow.cc (INCLUDE_MEMORY): Remove.
	* gimple-if-to-switch.cc (INCLUDE_MEMORY): Remove.
	* gimple-loop-interchange.cc (INCLUDE_MEMORY): Remove.
	* gimple-loop-jam.cc (INCLUDE_MEMORY): Remove.
	* gimple-loop-versioning.cc (INCLUDE_MEMORY): Remove.
	* gimple-lower-bitint.cc (INCLUDE_MEMORY): Remove.
	* gimple-predicate-analysis.cc (INCLUDE_MEMORY): Remove.
	* gimple-pretty-print.cc (INCLUDE_MEMORY): Remove.
	* gimple-range-cache.cc (INCLUDE_MEMORY): Remove.
	* gimple-range-edge.cc (INCLUDE_MEMORY): Remove.
	* gimple-range-fold.cc (INCLUDE_MEMORY): Remove.
	* gimple-range-gori.cc (INCLUDE_MEMORY): Remove.
	* gimple-range-infer.cc (INCLUDE_MEMORY): Remove.
	* gimple-range-op.cc (INCLUDE_MEMORY): Remove.
	* gimple-range-path.cc (INCLUDE_MEMORY): Remove.
	* gimple-range-phi.cc (INCLUDE_MEMORY): Remove.
	* gimple-range-trace.cc (INCLUDE_MEMORY): Remove.
	* gimple-range.cc (INCLUDE_MEMORY): Remove.
	* gimple-ssa-backprop.cc (INCLUDE_MEMORY): Remove.
	* gimple-ssa-sprintf.cc (INCLUDE_MEMORY): Remove.
	* gimple-ssa-store-merging.cc (INCLUDE_MEMORY): Remove.
	* gimple-ssa-strength-reduction.cc (INCLUDE_MEMORY): Remove.
	* gimple-ssa-warn-access.cc (INCLUDE_MEMORY): Remove.
	* gimple-ssa-warn-alloca.cc (INCLUDE_MEMORY): Remove.
	* gimple-ssa-warn-restrict.cc (INCLUDE_MEMORY): Remove.
	* gimple-streamer-in.cc (INCLUDE_MEMORY): Remove.
	* gimple-streamer-out.cc (INCLUDE_MEMORY): Remove.
	* gimple.cc (INCLUDE_MEMORY): Remove.
	* gimplify.cc (INCLUDE_MEMORY): Remove.
	* graph.cc (INCLUDE_MEMORY): Remove.
	* graphite-dependences.cc (INCLUDE_MEMORY): Remove.
	* graphite-isl-ast-to-gimple.cc (INCLUDE_MEMORY): Remove.
	* graphite-optimize-isl.cc (INCLUDE_MEMORY): Remove.
	* graphite-poly.cc (INCLUDE_MEMORY): Remove.
	* graphite-scop-detection.cc (INCLUDE_MEMORY): Remove.
	* graphite-sese-to-poly.cc (INCLUDE_MEMORY): Remove.
	* graphite.cc (INCLUDE_MEMORY): Remove.
	* graphviz.cc (INCLUDE_MEMORY): Remove.
	* input.cc (INCLUDE_MEMORY): Remove.
	* ipa-cp.cc (INCLUDE_MEMORY): Remove.
	* ipa-devirt.cc (INCLUDE_MEMORY): Remove.
	* ipa-fnsummary.cc (INCLUDE_MEMORY): Remove.
	* ipa-free-lang-data.cc (INCLUDE_MEMORY): Remove.
	* ipa-icf-gimple.cc (INCLUDE_MEMORY): Remove.
	* ipa-icf.cc (INCLUDE_MEMORY): Remove.
	* ipa-inline-analysis.cc (INCLUDE_MEMORY): Remove.
	* ipa-inline.cc (INCLUDE_MEMORY): Remove.
	* ipa-modref-tree.cc (INCLUDE_MEMORY): Remove.
	* ipa-modref.cc (INCLUDE_MEMORY): Remove.
	* ipa-param-manipulation.cc (INCLUDE_MEMORY): Remove.
	* ipa-polymorphic-call.cc (INCLUDE_MEMORY): Remove.
	* ipa-predicate.cc (INCLUDE_MEMORY): Remove.
	* ipa-profile.cc (INCLUDE_MEMORY): Remove.
	* ipa-prop.cc (INCLUDE_MEMORY): Remove.
	* ipa-pure-const.cc (INCLUDE_MEMORY): Remove.
	* ipa-reference.cc (INCLUDE_MEMORY): Remove.
	* ipa-split.cc (INCLUDE_MEMORY): Remove.
	* ipa-sra.cc (INCLUDE_MEMORY): Remove.
	* ipa-strub.cc (INCLUDE_MEMORY): Remove.
	* ipa-utils.cc (INCLUDE_MEMORY): Remove.
	* json-parsing.cc (INCLUDE_MEMORY): Remove.
	* json.cc (INCLUDE_MEMORY): Remove.
	* json.h: Don't check INCLUDE_MEMORY.
	* langhooks.cc (INCLUDE_MEMORY): Remove.
	* late-combine.cc (INCLUDE_MEMORY): Remove.
	* lazy-diagnostic-path.cc (INCLUDE_MEMORY): Remove.
	* libdiagnostics.cc (INCLUDE_MEMORY): Remove.
	* libsarifreplay.cc (INCLUDE_MEMORY): Remove.
	* lto-cgraph.cc (INCLUDE_MEMORY): Remove.
	* lto-compress.cc (INCLUDE_MEMORY): Remove.
	* lto-opts.cc (INCLUDE_MEMORY): Remove.
	* lto-section-in.cc (INCLUDE_MEMORY): Remove.
	* lto-section-out.cc (INCLUDE_MEMORY): Remove.
	* lto-streamer-in.cc (INCLUDE_MEMORY): Remove.
	* lto-streamer-out.cc (INCLUDE_MEMORY): Remove.
	* lto-streamer.cc (INCLUDE_MEMORY): Remove.
	* lto-wrapper.cc (INCLUDE_MEMORY): Remove.
	* make-unique.h (GCC_MAKE_UNIQUE): Remove.
	* multiple_target.cc (INCLUDE_MEMORY): Remove.
	* omp-expand.cc (INCLUDE_MEMORY): Remove.
	* omp-general.cc (INCLUDE_MEMORY): Remove.
	* omp-low.cc (INCLUDE_MEMORY): Remove.
	* omp-oacc-neuter-broadcast.cc (INCLUDE_MEMORY): Remove.
	* omp-offload.cc (INCLUDE_MEMORY): Remove.
	* omp-simd-clone.cc (INCLUDE_MEMORY): Remove.
	* opt-problem.cc (INCLUDE_MEMORY): Remove.
	* optinfo-emit-json.cc (INCLUDE_MEMORY): Remove.
	* optinfo.cc (INCLUDE_MEMORY): Remove.
	* optinfo.h: Don't check INCLUDE_MEMORY.
	* opts-common.cc (INCLUDE_MEMORY): Remove.
	* opts-diagnostic.cc (INCLUDE_MEMORY): Remove.
	* opts-global.cc (INCLUDE_MEMORY): Remove.
	* opts.cc (INCLUDE_MEMORY): Remove.
	* pair-fusion.cc (INCLUDE_MEMORY): Remove.
	* passes.cc (INCLUDE_MEMORY): Remove.
	* pointer-query.cc (INCLUDE_MEMORY): Remove.
	* predict.cc (INCLUDE_MEMORY): Remove.
	* pretty-print.cc (INCLUDE_MEMORY): Remove.
	* pretty-print.h: Don't check INCLUDE_MEMORY.
	* print-rtl.cc (INCLUDE_MEMORY): Remove.
	* print-tree.cc (INCLUDE_MEMORY): Remove.
	* profile-count.cc (INCLUDE_MEMORY): Remove.
	* range-op-float.cc (INCLUDE_MEMORY): Remove.
	* range-op-ptr.cc (INCLUDE_MEMORY): Remove.
	* range-op.cc (INCLUDE_MEMORY): Remove.
	* range.cc (INCLUDE_MEMORY): Remove.
	* read-rtl-function.cc (INCLUDE_MEMORY): Remove.
	* rtl-error.cc (INCLUDE_MEMORY): Remove.
	* rtl-ssa/accesses.cc (INCLUDE_MEMORY): Remove.
	* rtl-ssa/blocks.cc (INCLUDE_MEMORY): Remove.
	* rtl-ssa/changes.cc (INCLUDE_MEMORY): Remove.
	* rtl-ssa/functions.cc (INCLUDE_MEMORY): Remove.
	* rtl-ssa/insns.cc (INCLUDE_MEMORY): Remove.
	* rtl-ssa/movement.cc (INCLUDE_MEMORY): Remove.
	* rtl-tests.cc (INCLUDE_MEMORY): Remove.
	* sanopt.cc (INCLUDE_MEMORY): Remove.
	* sched-rgn.cc (INCLUDE_MEMORY): Remove.
	* selftest-diagnostic-path.cc (INCLUDE_MEMORY): Remove.
	* selftest-diagnostic.cc (INCLUDE_MEMORY): Remove.
	* selftest-json.cc (INCLUDE_MEMORY): Remove.
	* sese.cc (INCLUDE_MEMORY): Remove.
	* simple-diagnostic-path.cc (INCLUDE_MEMORY): Remove.
	* splay-tree-utils.cc (INCLUDE_MEMORY): Remove.
	* sreal.cc (INCLUDE_MEMORY): Remove.
	* stmt.cc (INCLUDE_MEMORY): Remove.
	* substring-locations.cc (INCLUDE_MEMORY): Remove.
	* symtab-clones.cc (INCLUDE_MEMORY): Remove.
	* symtab-thunks.cc (INCLUDE_MEMORY): Remove.
	* symtab.cc (INCLUDE_MEMORY): Remove.
	* system.h: Include memory unconditionally for C++.
	Also remove support for INCLUDE_MEMORY.
	* targhooks.cc (INCLUDE_MEMORY): Remove.
	* text-art/box-drawing.cc (INCLUDE_MEMORY): Remove.
	* text-art/canvas.cc (INCLUDE_MEMORY): Remove.
	* text-art/ruler.cc (INCLUDE_MEMORY): Remove.
	* text-art/selftests.cc (INCLUDE_MEMORY): Remove.
	* text-art/style.cc (INCLUDE_MEMORY): Remove.
	* text-art/styled-string.cc (INCLUDE_MEMORY): Remove.
	* text-art/table.cc (INCLUDE_MEMORY): Remove.
	* text-art/theme.cc (INCLUDE_MEMORY): Remove.
	* text-art/tree-widget.cc (INCLUDE_MEMORY): Remove.
	* text-art/widget.cc (INCLUDE_MEMORY): Remove.
	* timevar.cc (INCLUDE_MEMORY): Remove.
	* toplev.cc (INCLUDE_MEMORY): Remove.
	* trans-mem.cc (INCLUDE_MEMORY): Remove.
	* tree-affine.cc (INCLUDE_MEMORY): Remove.
	* tree-assume.cc (INCLUDE_MEMORY): Remove.
	* tree-call-cdce.cc (INCLUDE_MEMORY): Remove.
	* tree-cfg.cc (INCLUDE_MEMORY): Remove.
	* tree-chrec.cc (INCLUDE_MEMORY): Remove.
	* tree-data-ref.cc (INCLUDE_MEMORY): Remove.
	* tree-dfa.cc (INCLUDE_MEMORY): Remove.
	* tree-diagnostic-client-data-hooks.cc (INCLUDE_MEMORY): Remove.
	* tree-diagnostic.cc (INCLUDE_MEMORY): Remove.
	* tree-dump.cc (INCLUDE_MEMORY): Remove.
	* tree-if-conv.cc (INCLUDE_MEMORY): Remove.
	* tree-inline.cc (INCLUDE_MEMORY): Remove.
	* tree-into-ssa.cc (INCLUDE_MEMORY): Remove.
	* tree-logical-location.cc (INCLUDE_MEMORY): Remove.
	* tree-loop-distribution.cc (INCLUDE_MEMORY): Remove.
	* tree-nested.cc (INCLUDE_MEMORY): Remove.
	* tree-nrv.cc (INCLUDE_MEMORY): Remove.
	* tree-object-size.cc (INCLUDE_MEMORY): Remove.
	* tree-outof-ssa.cc (INCLUDE_MEMORY): Remove.
	* tree-parloops.cc (INCLUDE_MEMORY): Remove.
	* tree-predcom.cc (INCLUDE_MEMORY): Remove.
	* tree-pretty-print.cc (INCLUDE_MEMORY): Remove.
	* tree-profile.cc (INCLUDE_MEMORY): Remove.
	* tree-scalar-evolution.cc (INCLUDE_MEMORY): Remove.
	* tree-sra.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-address.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-alias.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-ccp.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-coalesce.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-copy.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-dce.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-dom.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-dse.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-forwprop.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-ifcombine.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-live.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-loop-ch.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-loop-im.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-loop-ivcanon.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-loop-ivopts.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-loop-manip.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-loop-niter.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-loop-prefetch.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-loop-split.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-loop-unswitch.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-math-opts.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-operands.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-phiopt.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-phiprop.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-pre.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-propagate.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-reassoc.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-sccvn.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-scopedtables.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-sink.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-strlen.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-structalias.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-ter.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-threadbackward.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-threadupdate.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa-uninit.cc (INCLUDE_MEMORY): Remove.
	* tree-ssa.cc (INCLUDE_MEMORY): Remove.
	* tree-ssanames.cc (INCLUDE_MEMORY): Remove.
	* tree-stdarg.cc (INCLUDE_MEMORY): Remove.
	* tree-streamer-in.cc (INCLUDE_MEMORY): Remove.
	* tree-streamer-out.cc (INCLUDE_MEMORY): Remove.
	* tree-streamer.cc (INCLUDE_MEMORY): Remove.
	* tree-switch-conversion.cc (INCLUDE_MEMORY): Remove.
	* tree-tailcall.cc (INCLUDE_MEMORY): Remove.
	* tree-vect-data-refs.cc (INCLUDE_MEMORY): Remove.
	* tree-vect-generic.cc (INCLUDE_MEMORY): Remove.
	* tree-vect-loop-manip.cc (INCLUDE_MEMORY): Remove.
	* tree-vect-loop.cc (INCLUDE_MEMORY): Remove.
	* tree-vect-patterns.cc (INCLUDE_MEMORY): Remove.
	* tree-vect-slp-patterns.cc (INCLUDE_MEMORY): Remove.
	* tree-vect-slp.cc (INCLUDE_MEMORY): Remove.
	* tree-vect-stmts.cc (INCLUDE_MEMORY): Remove.
	* tree-vectorizer.cc (INCLUDE_MEMORY): Remove.
	* tree-vrp.cc (INCLUDE_MEMORY): Remove.
	* tree.cc (INCLUDE_MEMORY): Remove.
	* ubsan.cc (INCLUDE_MEMORY): Remove.
	* value-pointer-equiv.cc (INCLUDE_MEMORY): Remove.
	* value-prof.cc (INCLUDE_MEMORY): Remove.
	* value-query.cc (INCLUDE_MEMORY): Remove.
	* value-range-pretty-print.cc (INCLUDE_MEMORY): Remove.
	* value-range-storage.cc (INCLUDE_MEMORY): Remove.
	* value-range.cc (INCLUDE_MEMORY): Remove.
	* value-relation.cc (INCLUDE_MEMORY): Remove.
	* var-tracking.cc (INCLUDE_MEMORY): Remove.
	* varpool.cc (INCLUDE_MEMORY): Remove.
	* vr-values.cc (INCLUDE_MEMORY): Remove.
	* wide-int-print.cc (INCLUDE_MEMORY): Remove.

gcc/c-family/ChangeLog:

	* c-ada-spec.cc (INCLUDE_MEMORY): Remove.
	* c-attribs.cc (INCLUDE_MEMORY): Remove.
	* c-common.cc (INCLUDE_MEMORY): Remove.
	* c-format.cc (INCLUDE_MEMORY): Remove.
	* c-gimplify.cc (INCLUDE_MEMORY): Remove.
	* c-indentation.cc (INCLUDE_MEMORY): Remove.
	* c-opts.cc (INCLUDE_MEMORY): Remove.
	* c-pch.cc (INCLUDE_MEMORY): Remove.
	* c-pragma.cc (INCLUDE_MEMORY): Remove.
	* c-pretty-print.cc (INCLUDE_MEMORY): Remove.
	* c-type-mismatch.cc (INCLUDE_MEMORY): Remove.
	* c-warn.cc (INCLUDE_MEMORY): Remove.
	* known-headers.cc (INCLUDE_MEMORY): Remove.
	* name-hint.h: Remove check of INCLUDE_MEMORY.

gcc/c/ChangeLog:

	* c-aux-info.cc (INCLUDE_MEMORY): Remove.
	* c-convert.cc (INCLUDE_MEMORY): Remove.
	* c-decl.cc (INCLUDE_MEMORY): Remove.
	* c-errors.cc (INCLUDE_MEMORY): Remove.
	* c-fold.cc (INCLUDE_MEMORY): Remove.
	* c-lang.cc (INCLUDE_MEMORY): Remove.
	* c-objc-common.cc (INCLUDE_MEMORY): Remove.
	* c-parser.cc (INCLUDE_MEMORY): Remove.
	* c-typeck.cc (INCLUDE_MEMORY): Remove.
	* gimple-parser.cc (INCLUDE_MEMORY): Remove.

gcc/cp/ChangeLog:

	* call.cc (INCLUDE_MEMORY): Remove.
	* class.cc (INCLUDE_MEMORY): Remove.
	* constexpr.cc (INCLUDE_MEMORY): Remove.
	* constraint.cc (INCLUDE_MEMORY): Remove.
	* contracts.cc (INCLUDE_MEMORY): Remove.
	* coroutines.cc (INCLUDE_MEMORY): Remove.
	* cp-gimplify.cc (INCLUDE_MEMORY): Remove.
	* cp-lang.cc (INCLUDE_MEMORY): Remove.
	* cp-objcp-common.cc (INCLUDE_MEMORY): Remove.
	* cp-ubsan.cc (INCLUDE_MEMORY): Remove.
	* cvt.cc (INCLUDE_MEMORY): Remove.
	* cxx-pretty-print.cc (INCLUDE_MEMORY): Remove.
	* decl.cc (INCLUDE_MEMORY): Remove.
	* decl2.cc (INCLUDE_MEMORY): Remove.
	* dump.cc (INCLUDE_MEMORY): Remove.
	* error.cc (INCLUDE_MEMORY): Remove.
	* except.cc (INCLUDE_MEMORY): Remove.
	* expr.cc (INCLUDE_MEMORY): Remove.
	* friend.cc (INCLUDE_MEMORY): Remove.
	* init.cc (INCLUDE_MEMORY): Remove.
	* lambda.cc (INCLUDE_MEMORY): Remove.
	* lex.cc (INCLUDE_MEMORY): Remove.
	* logic.cc (INCLUDE_MEMORY): Remove.
	* mangle.cc (INCLUDE_MEMORY): Remove.
	* mapper-client.cc (INCLUDE_MEMORY): Remove.
	* mapper-resolver.cc (INCLUDE_MEMORY): Remove.
	* method.cc (INCLUDE_MEMORY): Remove.
	* module.cc (INCLUDE_MEMORY): Remove.
	* name-lookup.cc (INCLUDE_MEMORY): Remove.
	* optimize.cc (INCLUDE_MEMORY): Remove.
	* parser.cc (INCLUDE_MEMORY): Remove.
	* pt.cc (INCLUDE_MEMORY): Remove.
	* ptree.cc (INCLUDE_MEMORY): Remove.
	* rtti.cc (INCLUDE_MEMORY): Remove.
	* search.cc (INCLUDE_MEMORY): Remove.
	* semantics.cc (INCLUDE_MEMORY): Remove.
	* tree.cc (INCLUDE_MEMORY): Remove.
	* typeck.cc (INCLUDE_MEMORY): Remove.
	* typeck2.cc (INCLUDE_MEMORY): Remove.
	* vtable-class-hierarchy.cc (INCLUDE_MEMORY): Remove.

gcc/d/ChangeLog:

	* d-attribs.cc (INCLUDE_MEMORY): Remove.
	* d-builtins.cc (INCLUDE_MEMORY): Remove.
	* d-codegen.cc (INCLUDE_MEMORY): Remove.
	* d-convert.cc (INCLUDE_MEMORY): Remove.
	* d-diagnostic.cc (INCLUDE_MEMORY): Remove.
	* d-frontend.cc (INCLUDE_MEMORY): Remove.
	* d-lang.cc (INCLUDE_MEMORY): Remove.
	* d-longdouble.cc (INCLUDE_MEMORY): Remove.
	* d-target.cc (INCLUDE_MEMORY): Remove.
	* decl.cc (INCLUDE_MEMORY): Remove.
	* expr.cc (INCLUDE_MEMORY): Remove.
	* intrinsics.cc (INCLUDE_MEMORY): Remove.
	* modules.cc (INCLUDE_MEMORY): Remove.
	* toir.cc (INCLUDE_MEMORY): Remove.
	* typeinfo.cc (INCLUDE_MEMORY): Remove.
	* types.cc (INCLUDE_MEMORY): Remove.

gcc/fortran/ChangeLog:

	* arith.cc (INCLUDE_MEMORY): Remove.
	* array.cc (INCLUDE_MEMORY): Remove.
	* bbt.cc (INCLUDE_MEMORY): Remove.
	* check.cc (INCLUDE_MEMORY): Remove.
	* class.cc (INCLUDE_MEMORY): Remove.
	* constructor.cc (INCLUDE_MEMORY): Remove.
	* convert.cc (INCLUDE_MEMORY): Remove.
	* cpp.cc (INCLUDE_MEMORY): Remove.
	* data.cc (INCLUDE_MEMORY): Remove.
	* decl.cc (INCLUDE_MEMORY): Remove.
	* dependency.cc (INCLUDE_MEMORY): Remove.
	* dump-parse-tree.cc (INCLUDE_MEMORY): Remove.
	* error.cc (INCLUDE_MEMORY): Remove.
	* expr.cc (INCLUDE_MEMORY): Remove.
	* f95-lang.cc (INCLUDE_MEMORY): Remove.
	* frontend-passes.cc (INCLUDE_MEMORY): Remove.
	* interface.cc (INCLUDE_MEMORY): Remove.
	* intrinsic.cc (INCLUDE_MEMORY): Remove.
	* io.cc (INCLUDE_MEMORY): Remove.
	* iresolve.cc (INCLUDE_MEMORY): Remove.
	* match.cc (INCLUDE_MEMORY): Remove.
	* matchexp.cc (INCLUDE_MEMORY): Remove.
	* misc.cc (INCLUDE_MEMORY): Remove.
	* module.cc (INCLUDE_MEMORY): Remove.
	* openmp.cc (INCLUDE_MEMORY): Remove.
	* options.cc (INCLUDE_MEMORY): Remove.
	* parse.cc (INCLUDE_MEMORY): Remove.
	* primary.cc (INCLUDE_MEMORY): Remove.
	* resolve.cc (INCLUDE_MEMORY): Remove.
	* scanner.cc (INCLUDE_MEMORY): Remove.
	* simplify.cc (INCLUDE_MEMORY): Remove.
	* st.cc (INCLUDE_MEMORY): Remove.
	* symbol.cc (INCLUDE_MEMORY): Remove.
	* target-memory.cc (INCLUDE_MEMORY): Remove.
	* trans-array.cc (INCLUDE_MEMORY): Remove.
	* trans-common.cc (INCLUDE_MEMORY): Remove.
	* trans-const.cc (INCLUDE_MEMORY): Remove.
	* trans-decl.cc (INCLUDE_MEMORY): Remove.
	* trans-expr.cc (INCLUDE_MEMORY): Remove.
	* trans-intrinsic.cc (INCLUDE_MEMORY): Remove.
	* trans-io.cc (INCLUDE_MEMORY): Remove.
	* trans-openmp.cc (INCLUDE_MEMORY): Remove.
	* trans-stmt.cc (INCLUDE_MEMORY): Remove.
	* trans-types.cc (INCLUDE_MEMORY): Remove.
	* trans.cc (INCLUDE_MEMORY): Remove.

gcc/go/ChangeLog:

	* go-backend.cc (INCLUDE_MEMORY): Remove.
	* go-lang.cc (INCLUDE_MEMORY): Remove.

gcc/jit/ChangeLog:

	* dummy-frontend.cc (INCLUDE_MEMORY): Remove.
	* jit-playback.cc (INCLUDE_MEMORY): Remove.
	* jit-recording.cc (INCLUDE_MEMORY): Remove.

gcc/lto/ChangeLog:

	* lto-common.cc (INCLUDE_MEMORY): Remove.
	* lto-dump.cc (INCLUDE_MEMORY): Remove.
	* lto-partition.cc (INCLUDE_MEMORY): Remove.
	* lto-symtab.cc (INCLUDE_MEMORY): Remove.
	* lto.cc (INCLUDE_MEMORY): Remove.

gcc/m2/ChangeLog:

	* gm2-gcc/gcc-consolidation.h (INCLUDE_MEMORY): Remove.
	* gm2-gcc/m2configure.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GASCII.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GASCII.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GArgs.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GArgs.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GAssertion.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GAssertion.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GBreak.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GBreak.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GCOROUTINES.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GCmdArgs.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GCmdArgs.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GDebug.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GDebug.h (INCLUDE_MEMORY): Remove. Remove.
	* mc-boot/GDynamicStrings.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GDynamicStrings.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GEnvironment.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GEnvironment.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GFIO.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GFIO.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GFormatStrings.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GFormatStrings.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GFpuIO.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GFpuIO.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GIO.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GIO.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GIndexing.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GIndexing.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GM2Dependent.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GM2Dependent.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GM2EXCEPTION.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GM2EXCEPTION.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GM2RTS.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GM2RTS.h (INCLUDE_MEMORY): Remove. Remove.
	* mc-boot/GMemUtils.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GMemUtils.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GNumberIO.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GNumberIO.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GPushBackInput.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GPushBackInput.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GRTExceptions.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GRTExceptions.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GRTco.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GRTentity.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GRTint.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GRTint.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GSArgs.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GSArgs.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GSFIO.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GSFIO.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GSYSTEM.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GSelective.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GStdIO.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GStdIO.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GStorage.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GStorage.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GStrCase.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GStrCase.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GStrIO.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GStrIO.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GStrLib.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GStrLib.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GStringConvert.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GStringConvert.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GSysExceptions.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GSysStorage.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GSysStorage.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GTimeString.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GTimeString.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GUnixArgs.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Galists.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Galists.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gdecl.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Gdecl.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gdtoa.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gerrno.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gkeyc.cc (INCLUDE_MEMORY): Remove.
	(checkGccConfigSystem): Remove printing out `#define INCLUDE_MEMORY`.
	* mc-boot/Gkeyc.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gldtoa.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Glibc.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Glibm.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Glists.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Glists.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcComment.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcComment.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcComp.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcComp.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcDebug.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcDebug.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcError.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcError.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcFileName.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcFileName.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcLexBuf.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcLexBuf.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcMetaError.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcMetaError.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcOptions.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcOptions.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcPreprocess.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcPreprocess.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcPretty.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcPretty.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcPrintf.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcPrintf.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcQuiet.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcQuiet.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcReserved.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcReserved.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcSearch.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcSearch.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcStack.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcStack.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcStream.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GmcStream.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcflex.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcp1.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcp1.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcp2.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcp2.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcp3.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcp3.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcp4.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcp4.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcp5.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Gmcp5.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GnameKey.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GnameKey.h (INCLUDE_MEMORY): Remove.
	* mc-boot/GsymbolKey.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/GsymbolKey.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gtermios.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gtop.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Gvarargs.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Gvarargs.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gwlists.cc (INCLUDE_MEMORY): Remove.
	* mc-boot/Gwlists.h (INCLUDE_MEMORY): Remove.
	* mc-boot/Gwrapc.h (INCLUDE_MEMORY): Remove.
	* pge-boot/GIndexing.h (INCLUDE_MEMORY): Remove.
	* pge-boot/GSEnvironment.h (INCLUDE_MEMORY): Remove.
	* pge-boot/GScan.h (INCLUDE_MEMORY): Remove.

gcc/objc/ChangeLog:

	* objc-act.cc (INCLUDE_MEMORY): Remove.
	* objc-encoding.cc (INCLUDE_MEMORY): Remove.
	* objc-gnu-runtime-abi-01.cc (INCLUDE_MEMORY): Remove.
	* objc-lang.cc (INCLUDE_MEMORY): Remove.
	* objc-next-runtime-abi-01.cc (INCLUDE_MEMORY): Remove.
	* objc-next-runtime-abi-02.cc (INCLUDE_MEMORY): Remove.
	* objc-runtime-shared-support.cc (INCLUDE_MEMORY): Remove.

gcc/objcp/ChangeLog:

	* objcp-decl.cc (INCLUDE_MEMORY): Remove.
	* objcp-lang.cc (INCLUDE_MEMORY): Remove.

gcc/rust/ChangeLog:

	* resolve/rust-ast-resolve-expr.cc (INCLUDE_MEMORY): Remove.
	* rust-attribs.cc (INCLUDE_MEMORY): Remove.
	* rust-system.h (INCLUDE_MEMORY): Remove.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-11-22 15:23:00 -08:00
Jakub Jelinek
50332a4fdd gcc: Remove trailing whitespace
I've tried to build stage3 with
-Wleading-whitespace=blanks -Wtrailing-whitespace=blank -Wno-error=leading-whitespace=blanks -Wno-error=trailing-whitespace=blank
added to STRICT_WARN and that expectably resulted in about
2744 unique trailing whitespace warnings and 124837 leading whitespace
warnings when excluding *.md files (which obviously is in big part a
generator issue).  Others from that are generator related, I think those
need to be solved later.

The following patch just fixes up the easy case (trailing whitespace),
which could be easily automated:
for i in `find . -name \*.h -o -name \*.cc -o -name \*.c | xargs grep -l '[ 	]$' | grep -v testsuite/`; do sed -i -e 's/[ 	]*$//' $i; done
I've excluded files which I knew are obviously generated or go FE.

Is there anything else we'd want to avoid the changes?

Due to patch size, I've split it between gcc/ part (this patch)
and rest (include/, libiberty/, libgcc/, libcpp/, libstdc++-v3/).

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

gcc/
	* lra-assigns.cc: Remove trailing whitespace.
	* symtab.cc: Likewise.
	* stmt.cc: Likewise.
	* cgraphbuild.cc: Likewise.
	* cfgcleanup.cc: Likewise.
	* loop-init.cc: Likewise.
	* df-problems.cc: Likewise.
	* diagnostic-macro-unwinding.cc: Likewise.
	* langhooks.h: Likewise.
	* except.cc: Likewise.
	* tree-vect-loop.cc: Likewise.
	* coverage.cc: Likewise.
	* hash-table.cc: Likewise.
	* ggc-page.cc: Likewise.
	* gimple-ssa-strength-reduction.cc: Likewise.
	* tree-parloops.cc: Likewise.
	* internal-fn.cc: Likewise.
	* ipa-split.cc: Likewise.
	* calls.cc: Likewise.
	* reorg.cc: Likewise.
	* sbitmap.h: Likewise.
	* omp-offload.cc: Likewise.
	* cfgrtl.cc: Likewise.
	* reginfo.cc: Likewise.
	* gengtype.h: Likewise.
	* omp-general.h: Likewise.
	* ipa-comdats.cc: Likewise.
	* gimple-range-edge.h: Likewise.
	* tree-ssa-structalias.cc: Likewise.
	* target.def: Likewise.
	* basic-block.h: Likewise.
	* graphite-isl-ast-to-gimple.cc: Likewise.
	* auto-profile.cc: Likewise.
	* optabs.cc: Likewise.
	* gengtype-lex.l: Likewise.
	* optabs.def: Likewise.
	* ira-build.cc: Likewise.
	* ira.cc: Likewise.
	* function.h: Likewise.
	* tree-ssa-propagate.cc: Likewise.
	* gcov-io.cc: Likewise.
	* builtin-types.def: Likewise.
	* ddg.cc: Likewise.
	* lra-spills.cc: Likewise.
	* cfg.cc: Likewise.
	* bitmap.cc: Likewise.
	* gimple-range-gori.h: Likewise.
	* tree-ssa-loop-im.cc: Likewise.
	* cfghooks.h: Likewise.
	* genmatch.cc: Likewise.
	* explow.cc: Likewise.
	* lto-streamer-in.cc: Likewise.
	* graphite-scop-detection.cc: Likewise.
	* ipa-prop.cc: Likewise.
	* gcc.cc: Likewise.
	* vec.h: Likewise.
	* cfgexpand.cc: Likewise.
	* config/alpha/vms.h: Likewise.
	* config/alpha/alpha.cc: Likewise.
	* config/alpha/driver-alpha.cc: Likewise.
	* config/alpha/elf.h: Likewise.
	* config/iq2000/iq2000.h: Likewise.
	* config/iq2000/iq2000.cc: Likewise.
	* config/pa/pa-64.h: Likewise.
	* config/pa/som.h: Likewise.
	* config/pa/pa.cc: Likewise.
	* config/pa/pa.h: Likewise.
	* config/pa/pa32-regs.h: Likewise.
	* config/c6x/c6x.cc: Likewise.
	* config/openbsd-stdint.h: Likewise.
	* config/elfos.h: Likewise.
	* config/lm32/lm32.cc: Likewise.
	* config/lm32/lm32.h: Likewise.
	* config/lm32/lm32-protos.h: Likewise.
	* config/darwin-c.cc: Likewise.
	* config/rx/rx.cc: Likewise.
	* config/host-darwin.h: Likewise.
	* config/netbsd.h: Likewise.
	* config/ia64/ia64.cc: Likewise.
	* config/ia64/freebsd.h: Likewise.
	* config/avr/avr-c.cc: Likewise.
	* config/avr/avr.cc: Likewise.
	* config/avr/avr-arch.h: Likewise.
	* config/avr/avr.h: Likewise.
	* config/avr/stdfix.h: Likewise.
	* config/avr/gen-avr-mmcu-specs.cc: Likewise.
	* config/avr/avr-log.cc: Likewise.
	* config/avr/elf.h: Likewise.
	* config/avr/gen-avr-mmcu-texi.cc: Likewise.
	* config/avr/avr-devices.cc: Likewise.
	* config/nvptx/nvptx.cc: Likewise.
	* config/vx-common.h: Likewise.
	* config/sol2.cc: Likewise.
	* config/rl78/rl78.cc: Likewise.
	* config/cris/cris.cc: Likewise.
	* config/arm/symbian.h: Likewise.
	* config/arm/unknown-elf.h: Likewise.
	* config/arm/linux-eabi.h: Likewise.
	* config/arm/arm.cc: Likewise.
	* config/arm/arm-mve-builtins.h: Likewise.
	* config/arm/bpabi.h: Likewise.
	* config/arm/vxworks.h: Likewise.
	* config/arm/arm.h: Likewise.
	* config/arm/aout.h: Likewise.
	* config/arm/elf.h: Likewise.
	* config/host-linux.cc: Likewise.
	* config/sh/sh_treg_combine.cc: Likewise.
	* config/sh/vxworks.h: Likewise.
	* config/sh/elf.h: Likewise.
	* config/sh/netbsd-elf.h: Likewise.
	* config/sh/sh.cc: Likewise.
	* config/sh/embed-elf.h: Likewise.
	* config/sh/sh.h: Likewise.
	* config/darwin-driver.cc: Likewise.
	* config/m32c/m32c.cc: Likewise.
	* config/frv/frv.cc: Likewise.
	* config/openbsd.h: Likewise.
	* config/aarch64/aarch64-protos.h: Likewise.
	* config/aarch64/aarch64-builtins.cc: Likewise.
	* config/aarch64/aarch64-cost-tables.h: Likewise.
	* config/aarch64/aarch64.cc: Likewise.
	* config/bfin/bfin.cc: Likewise.
	* config/bfin/bfin.h: Likewise.
	* config/bfin/bfin-protos.h: Likewise.
	* config/i386/gmm_malloc.h: Likewise.
	* config/i386/djgpp.h: Likewise.
	* config/i386/sol2.h: Likewise.
	* config/i386/stringop.def: Likewise.
	* config/i386/i386-features.cc: Likewise.
	* config/i386/openbsdelf.h: Likewise.
	* config/i386/cpuid.h: Likewise.
	* config/i386/i386.h: Likewise.
	* config/i386/smmintrin.h: Likewise.
	* config/i386/avx10_2-512convertintrin.h: Likewise.
	* config/i386/i386-options.cc: Likewise.
	* config/i386/i386-opts.h: Likewise.
	* config/i386/i386-expand.cc: Likewise.
	* config/i386/avx512dqintrin.h: Likewise.
	* config/i386/wmmintrin.h: Likewise.
	* config/i386/gnu-user.h: Likewise.
	* config/i386/host-mingw32.cc: Likewise.
	* config/i386/avx10_2bf16intrin.h: Likewise.
	* config/i386/cygwin.h: Likewise.
	* config/i386/driver-i386.cc: Likewise.
	* config/i386/biarch64.h: Likewise.
	* config/i386/host-cygwin.cc: Likewise.
	* config/i386/cygming.h: Likewise.
	* config/i386/i386-builtins.cc: Likewise.
	* config/i386/avx10_2convertintrin.h: Likewise.
	* config/i386/i386.cc: Likewise.
	* config/i386/gas.h: Likewise.
	* config/i386/freebsd.h: Likewise.
	* config/mingw/winnt-cxx.cc: Likewise.
	* config/mingw/winnt.cc: Likewise.
	* config/h8300/h8300.cc: Likewise.
	* config/host-solaris.cc: Likewise.
	* config/m32r/m32r.h: Likewise.
	* config/m32r/m32r.cc: Likewise.
	* config/darwin.h: Likewise.
	* config/sparc/linux64.h: Likewise.
	* config/sparc/sparc-protos.h: Likewise.
	* config/sparc/sysv4.h: Likewise.
	* config/sparc/sparc.h: Likewise.
	* config/sparc/linux.h: Likewise.
	* config/sparc/freebsd.h: Likewise.
	* config/sparc/sparc.cc: Likewise.
	* config/gcn/gcn-run.cc: Likewise.
	* config/gcn/gcn.cc: Likewise.
	* config/gcn/gcn-tree.cc: Likewise.
	* config/kopensolaris-gnu.h: Likewise.
	* config/nios2/nios2.h: Likewise.
	* config/nios2/elf.h: Likewise.
	* config/nios2/nios2.cc: Likewise.
	* config/host-netbsd.cc: Likewise.
	* config/rtems.h: Likewise.
	* config/pdp11/pdp11.cc: Likewise.
	* config/pdp11/pdp11.h: Likewise.
	* config/mn10300/mn10300.cc: Likewise.
	* config/mn10300/linux.h: Likewise.
	* config/moxie/moxie.h: Likewise.
	* config/moxie/moxie.cc: Likewise.
	* config/rs6000/aix71.h: Likewise.
	* config/rs6000/vec_types.h: Likewise.
	* config/rs6000/xcoff.h: Likewise.
	* config/rs6000/rs6000.cc: Likewise.
	* config/rs6000/rs6000-internal.h: Likewise.
	* config/rs6000/rs6000-p8swap.cc: Likewise.
	* config/rs6000/rs6000-c.cc: Likewise.
	* config/rs6000/aix.h: Likewise.
	* config/rs6000/rs6000-logue.cc: Likewise.
	* config/rs6000/rs6000-string.cc: Likewise.
	* config/rs6000/rs6000-call.cc: Likewise.
	* config/rs6000/ppu_intrinsics.h: Likewise.
	* config/rs6000/altivec.h: Likewise.
	* config/rs6000/darwin.h: Likewise.
	* config/rs6000/host-darwin.cc: Likewise.
	* config/rs6000/freebsd64.h: Likewise.
	* config/rs6000/spu2vmx.h: Likewise.
	* config/rs6000/linux.h: Likewise.
	* config/rs6000/si2vmx.h: Likewise.
	* config/rs6000/driver-rs6000.cc: Likewise.
	* config/rs6000/freebsd.h: Likewise.
	* config/vxworksae.h: Likewise.
	* config/mips/frame-header-opt.cc: Likewise.
	* config/mips/mips.h: Likewise.
	* config/mips/mips.cc: Likewise.
	* config/mips/sde.h: Likewise.
	* config/darwin-protos.h: Likewise.
	* config/mcore/mcore-elf.h: Likewise.
	* config/mcore/mcore.h: Likewise.
	* config/mcore/mcore.cc: Likewise.
	* config/epiphany/epiphany.cc: Likewise.
	* config/fr30/fr30.h: Likewise.
	* config/fr30/fr30.cc: Likewise.
	* config/riscv/riscv-vector-builtins-shapes.cc: Likewise.
	* config/riscv/riscv-vector-builtins-bases.cc: Likewise.
	* config/visium/visium.h: Likewise.
	* config/mmix/mmix.cc: Likewise.
	* config/v850/v850.cc: Likewise.
	* config/v850/v850-c.cc: Likewise.
	* config/v850/v850.h: Likewise.
	* config/stormy16/stormy16.cc: Likewise.
	* config/stormy16/stormy16-protos.h: Likewise.
	* config/stormy16/stormy16.h: Likewise.
	* config/arc/arc.cc: Likewise.
	* config/vxworks.cc: Likewise.
	* config/microblaze/microblaze-c.cc: Likewise.
	* config/microblaze/microblaze-protos.h: Likewise.
	* config/microblaze/microblaze.h: Likewise.
	* config/microblaze/microblaze.cc: Likewise.
	* config/freebsd-spec.h: Likewise.
	* config/m68k/m68kelf.h: Likewise.
	* config/m68k/m68k.cc: Likewise.
	* config/m68k/netbsd-elf.h: Likewise.
	* config/m68k/linux.h: Likewise.
	* config/freebsd.h: Likewise.
	* config/host-openbsd.cc: Likewise.
	* regcprop.cc: Likewise.
	* dumpfile.cc: Likewise.
	* combine.cc: Likewise.
	* tree-ssa-forwprop.cc: Likewise.
	* ipa-profile.cc: Likewise.
	* hw-doloop.cc: Likewise.
	* opts.cc: Likewise.
	* gcc-ar.cc: Likewise.
	* tree-cfg.cc: Likewise.
	* incpath.cc: Likewise.
	* tree-ssa-sccvn.cc: Likewise.
	* function.cc: Likewise.
	* genattrtab.cc: Likewise.
	* rtl.def: Likewise.
	* genchecksum.cc: Likewise.
	* profile.cc: Likewise.
	* df-core.cc: Likewise.
	* tree-pretty-print.cc: Likewise.
	* tree.h: Likewise.
	* plugin.cc: Likewise.
	* tree-ssa-loop-ch.cc: Likewise.
	* emit-rtl.cc: Likewise.
	* haifa-sched.cc: Likewise.
	* gimple-range-edge.cc: Likewise.
	* range-op.cc: Likewise.
	* tree-ssa-ccp.cc: Likewise.
	* dwarf2cfi.cc: Likewise.
	* recog.cc: Likewise.
	* vtable-verify.cc: Likewise.
	* system.h: Likewise.
	* regrename.cc: Likewise.
	* tree-ssa-dom.cc: Likewise.
	* loop-unroll.cc: Likewise.
	* lra-constraints.cc: Likewise.
	* pretty-print.cc: Likewise.
	* ifcvt.cc: Likewise.
	* ipa.cc: Likewise.
	* alloc-pool.h: Likewise.
	* collect2.cc: Likewise.
	* pointer-query.cc: Likewise.
	* cfgloop.cc: Likewise.
	* toplev.cc: Likewise.
	* sese.cc: Likewise.
	* gengtype.cc: Likewise.
	* gimplify-me.cc: Likewise.
	* double-int.cc: Likewise.
	* bb-reorder.cc: Likewise.
	* dwarf2out.cc: Likewise.
	* tree-ssa-loop-ivcanon.cc: Likewise.
	* tree-ssa-reassoc.cc: Likewise.
	* cgraph.cc: Likewise.
	* sel-sched.cc: Likewise.
	* attribs.cc: Likewise.
	* expr.cc: Likewise.
	* tree-ssa-scopedtables.h: Likewise.
	* gimple-range-cache.cc: Likewise.
	* ipa-pure-const.cc: Likewise.
	* tree-inline.cc: Likewise.
	* genhooks.cc: Likewise.
	* gimple-range-phi.h: Likewise.
	* shrink-wrap.cc: Likewise.
	* tree.cc: Likewise.
	* gimple.cc: Likewise.
	* backend.h: Likewise.
	* opts-common.cc: Likewise.
	* cfg-flags.def: Likewise.
	* gcse-common.cc: Likewise.
	* tree-ssa-scopedtables.cc: Likewise.
	* ccmp.cc: Likewise.
	* builtins.def: Likewise.
	* builtin-attrs.def: Likewise.
	* postreload.cc: Likewise.
	* sched-deps.cc: Likewise.
	* ipa-inline-transform.cc: Likewise.
	* tree-vect-generic.cc: Likewise.
	* ipa-polymorphic-call.cc: Likewise.
	* builtins.cc: Likewise.
	* sel-sched-ir.cc: Likewise.
	* trans-mem.cc: Likewise.
	* ipa-visibility.cc: Likewise.
	* cgraph.h: Likewise.
	* tree-ssa-phiopt.cc: Likewise.
	* genopinit.cc: Likewise.
	* ipa-inline.cc: Likewise.
	* omp-low.cc: Likewise.
	* ipa-utils.cc: Likewise.
	* tree-ssa-math-opts.cc: Likewise.
	* tree-ssa-ifcombine.cc: Likewise.
	* gimple-range.cc: Likewise.
	* ipa-fnsummary.cc: Likewise.
	* ira-color.cc: Likewise.
	* value-prof.cc: Likewise.
	* varasm.cc: Likewise.
	* ipa-icf.cc: Likewise.
	* ira-emit.cc: Likewise.
	* lto-streamer.h: Likewise.
	* lto-wrapper.cc: Likewise.
	* regs.h: Likewise.
	* gengtype-parse.cc: Likewise.
	* alias.cc: Likewise.
	* lto-streamer.cc: Likewise.
	* real.h: Likewise.
	* wide-int.h: Likewise.
	* targhooks.cc: Likewise.
	* gimple-ssa-warn-access.cc: Likewise.
	* real.cc: Likewise.
	* ipa-reference.cc: Likewise.
	* bitmap.h: Likewise.
	* ginclude/float.h: Likewise.
	* ginclude/stddef.h: Likewise.
	* ginclude/stdarg.h: Likewise.
	* ginclude/stdatomic.h: Likewise.
	* optabs.h: Likewise.
	* sel-sched-ir.h: Likewise.
	* convert.cc: Likewise.
	* cgraphunit.cc: Likewise.
	* lra-remat.cc: Likewise.
	* tree-if-conv.cc: Likewise.
	* gcov-dump.cc: Likewise.
	* tree-predcom.cc: Likewise.
	* dominance.cc: Likewise.
	* gimple-range-cache.h: Likewise.
	* ipa-devirt.cc: Likewise.
	* rtl.h: Likewise.
	* ubsan.cc: Likewise.
	* tree-ssa.cc: Likewise.
	* ssa.h: Likewise.
	* cse.cc: Likewise.
	* jump.cc: Likewise.
	* hwint.h: Likewise.
	* caller-save.cc: Likewise.
	* coretypes.h: Likewise.
	* ipa-fnsummary.h: Likewise.
	* tree-ssa-strlen.cc: Likewise.
	* modulo-sched.cc: Likewise.
	* cgraphclones.cc: Likewise.
	* lto-cgraph.cc: Likewise.
	* hw-doloop.h: Likewise.
	* data-streamer.h: Likewise.
	* compare-elim.cc: Likewise.
	* profile-count.h: Likewise.
	* tree-vect-loop-manip.cc: Likewise.
	* ree.cc: Likewise.
	* reload.cc: Likewise.
	* tree-ssa-loop-split.cc: Likewise.
	* tree-into-ssa.cc: Likewise.
	* gcse.cc: Likewise.
	* cfgloopmanip.cc: Likewise.
	* df.h: Likewise.
	* fold-const.cc: Likewise.
	* wide-int.cc: Likewise.
	* gengtype-state.cc: Likewise.
	* sanitizer.def: Likewise.
	* tree-ssa-sink.cc: Likewise.
	* target-hooks-macros.h: Likewise.
	* tree-ssa-pre.cc: Likewise.
	* gimple-pretty-print.cc: Likewise.
	* ipa-utils.h: Likewise.
	* tree-outof-ssa.cc: Likewise.
	* tree-ssa-coalesce.cc: Likewise.
	* gimple-match.h: Likewise.
	* tree-ssa-loop-niter.cc: Likewise.
	* tree-loop-distribution.cc: Likewise.
	* tree-emutls.cc: Likewise.
	* tree-eh.cc: Likewise.
	* varpool.cc: Likewise.
	* ssa-iterators.h: Likewise.
	* asan.cc: Likewise.
	* reload1.cc: Likewise.
	* cfgloopanal.cc: Likewise.
	* tree-vectorizer.cc: Likewise.
	* simplify-rtx.cc: Likewise.
	* opts-global.cc: Likewise.
	* gimple-ssa-store-merging.cc: Likewise.
	* expmed.cc: Likewise.
	* tree-ssa-loop-prefetch.cc: Likewise.
	* tree-ssa-dse.h: Likewise.
	* tree-vect-stmts.cc: Likewise.
	* gimple-fold.cc: Likewise.
	* lra-coalesce.cc: Likewise.
	* data-streamer-out.cc: Likewise.
	* diagnostic.cc: Likewise.
	* tree-ssa-alias.cc: Likewise.
	* tree-vect-patterns.cc: Likewise.
	* common/common-target.def: Likewise.
	* common/config/rx/rx-common.cc: Likewise.
	* common/config/msp430/msp430-common.cc: Likewise.
	* common/config/avr/avr-common.cc: Likewise.
	* common/config/i386/i386-common.cc: Likewise.
	* common/config/pdp11/pdp11-common.cc: Likewise.
	* common/config/rs6000/rs6000-common.cc: Likewise.
	* common/config/mcore/mcore-common.cc: Likewise.
	* graphite.cc: Likewise.
	* gimple-low.cc: Likewise.
	* genmodes.cc: Likewise.
	* gimple-loop-jam.cc: Likewise.
	* lto-streamer-out.cc: Likewise.
	* predict.cc: Likewise.
	* omp-expand.cc: Likewise.
	* gimple-array-bounds.cc: Likewise.
	* predict.def: Likewise.
	* opts.h: Likewise.
	* tree-stdarg.cc: Likewise.
	* gimplify.cc: Likewise.
	* ira-lives.cc: Likewise.
	* loop-doloop.cc: Likewise.
	* lra.cc: Likewise.
	* gimple-iterator.h: Likewise.
	* tree-sra.cc: Likewise.
gcc/fortran/
	* trans-openmp.cc: Remove trailing whitespace.
	* trans-common.cc: Likewise.
	* match.h: Likewise.
	* scanner.cc: Likewise.
	* gfortranspec.cc: Likewise.
	* io.cc: Likewise.
	* iso-c-binding.def: Likewise.
	* iso-fortran-env.def: Likewise.
	* types.def: Likewise.
	* openmp.cc: Likewise.
	* f95-lang.cc: Likewise.
gcc/analyzer/
	* state-purge.cc: Remove trailing whitespace.
	* region-model.h: Likewise.
	* region-model.cc: Likewise.
	* program-point.cc: Likewise.
	* exploded-graph.h: Likewise.
	* program-state.cc: Likewise.
	* supergraph.cc: Likewise.
gcc/c-family/
	* c-ubsan.cc: Remove trailing whitespace.
	* stub-objc.cc: Likewise.
	* c-pragma.cc: Likewise.
	* c-ppoutput.cc: Likewise.
	* c-indentation.cc: Likewise.
	* c-ada-spec.cc: Likewise.
	* c-opts.cc: Likewise.
	* c-common.cc: Likewise.
	* c-format.cc: Likewise.
	* c-omp.cc: Likewise.
	* c-objc.h: Likewise.
	* c-cppbuiltin.cc: Likewise.
	* c-attribs.cc: Likewise.
	* c-target.def: Likewise.
	* c-common.h: Likewise.
gcc/c/
	* c-typeck.cc: Remove trailing whitespace.
	* gimple-parser.cc: Likewise.
	* c-parser.cc: Likewise.
	* c-decl.cc: Likewise.
gcc/cp/
	* vtable-class-hierarchy.cc: Remove trailing whitespace.
	* typeck2.cc: Likewise.
	* decl.cc: Likewise.
	* init.cc: Likewise.
	* semantics.cc: Likewise.
	* module.cc: Likewise.
	* rtti.cc: Likewise.
	* cxx-pretty-print.cc: Likewise.
	* cvt.cc: Likewise.
	* mangle.cc: Likewise.
	* name-lookup.h: Likewise.
	* coroutines.cc: Likewise.
	* error.cc: Likewise.
	* lambda.cc: Likewise.
	* tree.cc: Likewise.
	* g++spec.cc: Likewise.
	* decl2.cc: Likewise.
	* cp-tree.h: Likewise.
	* parser.cc: Likewise.
	* pt.cc: Likewise.
	* call.cc: Likewise.
	* lex.cc: Likewise.
	* cp-lang.cc: Likewise.
	* cp-tree.def: Likewise.
	* constexpr.cc: Likewise.
	* typeck.cc: Likewise.
	* name-lookup.cc: Likewise.
	* optimize.cc: Likewise.
	* search.cc: Likewise.
	* mapper-client.cc: Likewise.
	* ptree.cc: Likewise.
	* class.cc: Likewise.
gcc/jit/
	* docs/examples/tut04-toyvm/toyvm.cc: Remove trailing whitespace.
gcc/lto/
	* lto-object.cc: Remove trailing whitespace.
	* lto-symtab.cc: Likewise.
	* lto-partition.cc: Likewise.
	* lang-specs.h: Likewise.
	* lto-lang.cc: Likewise.
gcc/objc/
	* objc-encoding.cc: Remove trailing whitespace.
	* objc-map.h: Likewise.
	* objc-next-runtime-abi-01.cc: Likewise.
	* objc-act.cc: Likewise.
	* objc-map.cc: Likewise.
gcc/objcp/
	* objcp-decl.cc: Remove trailing whitespace.
	* objcp-lang.cc: Likewise.
	* objcp-decl.h: Likewise.
gcc/rust/
	* util/optional.h: Remove trailing whitespace.
	* util/expected.h: Likewise.
	* util/rust-unicode-data.h: Likewise.
gcc/m2/
	* mc-boot/GFpuIO.cc: Remove trailing whitespace.
	* mc-boot/GFIO.cc: Likewise.
	* mc-boot/GFormatStrings.cc: Likewise.
	* mc-boot/GCmdArgs.cc: Likewise.
	* mc-boot/GDebug.h: Likewise.
	* mc-boot/GM2Dependent.cc: Likewise.
	* mc-boot/GRTint.cc: Likewise.
	* mc-boot/GDebug.cc: Likewise.
	* mc-boot/GmcError.cc: Likewise.
	* mc-boot/Gmcp4.cc: Likewise.
	* mc-boot/GM2RTS.cc: Likewise.
	* mc-boot/GIO.cc: Likewise.
	* mc-boot/Gmcp5.cc: Likewise.
	* mc-boot/GDynamicStrings.cc: Likewise.
	* mc-boot/Gmcp1.cc: Likewise.
	* mc-boot/GFormatStrings.h: Likewise.
	* mc-boot/Gmcp2.cc: Likewise.
	* mc-boot/Gmcp3.cc: Likewise.
	* pge-boot/GFIO.cc: Likewise.
	* pge-boot/GDebug.h: Likewise.
	* pge-boot/GM2Dependent.cc: Likewise.
	* pge-boot/GDebug.cc: Likewise.
	* pge-boot/GM2RTS.cc: Likewise.
	* pge-boot/GSymbolKey.cc: Likewise.
	* pge-boot/GIO.cc: Likewise.
	* pge-boot/GIndexing.cc: Likewise.
	* pge-boot/GDynamicStrings.cc: Likewise.
	* pge-boot/GFormatStrings.h: Likewise.
gcc/go/
	* go-gcc.cc: Remove trailing whitespace.
	* gospec.cc: Likewise.
2024-10-25 10:00:29 +02:00
David Malcolm
bf43fe6aa9 Use unique_ptr in more places in pretty_printer/diagnostics [PR116613]
My forthcoming patches for PR other/116613 make much more use of
cloning of pretty_printers than before, so it makes sense as a
preliminary patch for the result of pretty_printer::clone to be a
std::unique_ptr, rather than add more manual uses of "delete".

On doing so, I noticed various other places where naked new/delete is
used for run-time configuration of diagnostics:
* the output format (text vs SARIF)
* client data hooks
* the option manager
* the URLifier

Hence this patch also makes use of std::unique_ptr and ::make_unique for
managing such client policy classes, and also for diagnostic_buffer's
per-format implementations.

Unfortunately we can't directly include <memory> in our internal headers
but instead any of our TUs that make use of std::unique_ptr must #define
INCLUDE_MEMORY before including system.h.

Hence the bulk of this patch is taken up with adding a define of
INCLUDE_MEMORY to hundreds of source files: everything that includes
diagnostic.h or pretty-print.h (and thus anything transitively such as
includers of lto-wrapper.h, c-tree.h, cp-tree.h and rtl-ssa.h).

Thanks to Gaius Mulley for the parts of the patch that regenerated the
m2 files.

gcc/ada/ChangeLog:
	PR other/116613
	* gcc-interface/misc.cc: Add #define INCLUDE_MEMORY
	* gcc-interface/trans.cc: Likewise.
	* gcc-interface/utils.cc: Likewise.

gcc/analyzer/ChangeLog:
	PR other/116613
	* analyzer-logging.cc: Add #define INCLUDE_MEMORY
	(logger::logger): Update for m_pp becoming a unique_ptr.
	(logger::~logger): Likewise.
	(logger::log_va_partial): Likewise.
	(logger::end_log_line): Likewise.
	* analyzer-logging.h (logger::get_printer): Likewise.
	(logger::m_pp): Convert to a unique_ptr.
	* analyzer.cc (make_label_text): Use
	diagnostic_context::clone_printer and use unique_ptr.
	(make_label_text_n): Likewise.
	* bar-chart.cc: Add #define INCLUDE_MEMORY
	* pending-diagnostic.cc (evdesc::event_desc::formatted_print):
	Use diagnostic_context::clone_printer and use unique_ptr.
	* sm-malloc.cc (sufficiently_similar_p): Likewise.
	* supergraph.cc (supergraph::dump_dot_to_file): Likewise.

gcc/c-family/ChangeLog:
	PR other/116613
	* c-ada-spec.cc: Add #define INCLUDE_MEMORY.
	* c-attribs.cc: Likewise.
	* c-common.cc: Likewise.
	* c-format.cc: Likewise.
	* c-gimplify.cc: Likewise.
	* c-indentation.cc: Likewise.
	* c-opts.cc: Likewise.
	* c-pch.cc: Likewise.
	* c-pragma.cc: Likewise.
	* c-pretty-print.cc: Likewise.  Add #include "make-unique.h".
	(c_pretty_printer::clone): Use std::unique_ptr and ::make_unique.
	* c-pretty-print.h (c_pretty_printer::clone): Use std::unique_ptr.
	* c-type-mismatch.cc: Add #define INCLUDE_MEMORY.
	* c-warn.cc: Likewise.

gcc/c/ChangeLog:
	PR other/116613
	* c-aux-info.cc: Add #define INCLUDE_MEMORY.
	* c-convert.cc: Likewise.
	* c-errors.cc: Likewise.
	* c-fold.cc: Likewise.
	* c-lang.cc: Likewise.
	* c-objc-common.cc: Likewise.
	(pp_markup::element_quoted_type::print_type): Use unique_ptr.
	* c-typeck.cc: Add #define INCLUDE_MEMORY.
	* gimple-parser.cc: Likewise.

gcc/cp/ChangeLog:
	PR other/116613
	* call.cc: Add #define INCLUDE_MEMORY.
	* class.cc: Likewise.
	* constexpr.cc: Likewise.
	* constraint.cc: Likewise.
	* contracts.cc: Likewise.
	* coroutines.cc: Likewise.
	* cp-gimplify.cc: Likewise.
	* cp-lang.cc: Likewise.
	* cp-objcp-common.cc: Likewise.
	* cp-ubsan.cc: Likewise.
	* cvt.cc: Likewise.
	* cxx-pretty-print.cc: Likewise.  Add #include "cp-tree.h".
	(cxx_pretty_printer::clone): Use std::unique_ptr and
	::make_unique.
	* cxx-pretty-print.h (cxx_pretty_printer::clone): Use
	std::unique_ptr.
	* decl2.cc: Add #define INCLUDE_MEMORY.
	* dump.cc: Likewise.
	* except.cc: Likewise.
	* expr.cc: Likewise.
	* friend.cc: Likewise.
	* init.cc: Likewise.
	* lambda.cc: Likewise.
	* logic.cc: Likewise.
	* mangle.cc: Likewise.
	* method.cc: Likewise.
	* optimize.cc: Likewise.
	* pt.cc: Likewise.
	* ptree.cc: Likewise.
	* rtti.cc: Likewise.
	* search.cc: Likewise.
	* semantics.cc: Likewise.
	* tree.cc: Likewise.
	* typeck.cc: Likewise.
	* typeck2.cc: Likewise.
	* vtable-class-hierarchy.cc: Likewise.

gcc/d/ChangeLog:
	PR other/116613
	* d-attribs.cc: Add #define INCLUDE_MEMORY.
	* d-builtins.cc: Likewise.
	* d-codegen.cc: Likewise.
	* d-convert.cc: Likewise.
	* d-diagnostic.cc: Likewise.
	* d-frontend.cc: Likewise.
	* d-lang.cc: Likewise.
	* d-longdouble.cc: Likewise.
	* d-target.cc: Likewise.
	* decl.cc: Likewise.
	* expr.cc: Likewise.
	* intrinsics.cc: Likewise.
	* modules.cc: Likewise.
	* toir.cc: Likewise.
	* typeinfo.cc: Likewise.
	* types.cc: Likewise.

gcc/fortran/ChangeLog:
	PR other/116613
	* arith.cc: Add #define INCLUDE_MEMORY.
	* array.cc: Likewise.
	* bbt.cc: Likewise.
	* check.cc: Likewise.
	* class.cc: Likewise.
	* constructor.cc: Likewise.
	* convert.cc: Likewise.
	* cpp.cc: Likewise.
	* data.cc: Likewise.
	* decl.cc: Likewise.
	* dependency.cc: Likewise.
	* dump-parse-tree.cc: Likewise.
	* error.cc: Likewise.
	* expr.cc: Likewise.
	* f95-lang.cc: Likewise.
	* frontend-passes.cc: Likewise.
	* interface.cc: Likewise.
	* intrinsic.cc: Likewise.
	* io.cc: Likewise.
	* iresolve.cc: Likewise.
	* match.cc: Likewise.
	* matchexp.cc: Likewise.
	* misc.cc: Likewise.
	* module.cc: Likewise.
	* openmp.cc: Likewise.
	* options.cc: Likewise.
	* parse.cc: Likewise.
	* primary.cc: Likewise.
	* resolve.cc: Likewise.
	* scanner.cc: Likewise.
	* simplify.cc: Likewise.
	* st.cc: Likewise.
	* symbol.cc: Likewise.
	* target-memory.cc: Likewise.
	* trans-array.cc: Likewise.
	* trans-common.cc: Likewise.
	* trans-const.cc: Likewise.
	* trans-decl.cc: Likewise.
	* trans-expr.cc: Likewise.
	* trans-intrinsic.cc: Likewise.
	* trans-io.cc: Likewise.
	* trans-openmp.cc: Likewise.
	* trans-stmt.cc: Likewise.
	* trans-types.cc: Likewise.
	* trans.cc: Likewise.

gcc/go/ChangeLog:
	PR other/116613
	* go-backend.cc: Add #define INCLUDE_MEMORY.
	* go-lang.cc: Likewise.

gcc/jit/ChangeLog:
	PR other/116613
	* dummy-frontend.cc: Add #define INCLUDE_MEMORY.
	* jit-playback.cc: Likewise.
	* jit-recording.cc: Likewise.

gcc/lto/ChangeLog:
	PR other/116613
	* lto-common.cc: Add #define INCLUDE_MEMORY.
	* lto-dump.cc: Likewise.
	* lto-partition.cc: Likewise.
	* lto-symtab.cc: Likewise.
	* lto.cc: Likewise.

gcc/m2/ChangeLog:
	PR other/116613
	* gm2-gcc/gcc-consolidation.h: Add #define INCLUDE_MEMORY.
	* gm2-gcc/m2configure.cc: Likewise.
	* mc-boot/GASCII.cc: Regenerate.
	* mc-boot/GASCII.h: Ditto.
	* mc-boot/GArgs.cc: Ditto.
	* mc-boot/GArgs.h: Ditto.
	* mc-boot/GAssertion.cc: Ditto.
	* mc-boot/GAssertion.h: Ditto.
	* mc-boot/GBreak.cc: Ditto.
	* mc-boot/GBreak.h: Ditto.
	* mc-boot/GCOROUTINES.h: Ditto.
	* mc-boot/GCmdArgs.cc: Ditto.
	* mc-boot/GCmdArgs.h: Ditto.
	* mc-boot/GDebug.cc: Ditto.
	* mc-boot/GDebug.h: Ditto.
	* mc-boot/GDynamicStrings.cc: Ditto.
	* mc-boot/GDynamicStrings.h: Ditto.
	* mc-boot/GEnvironment.cc: Ditto.
	* mc-boot/GEnvironment.h: Ditto.
	* mc-boot/GFIO.cc: Ditto.
	* mc-boot/GFIO.h: Ditto.
	* mc-boot/GFormatStrings.cc: Ditto.
	* mc-boot/GFormatStrings.h: Ditto.
	* mc-boot/GFpuIO.cc: Ditto.
	* mc-boot/GFpuIO.h: Ditto.
	* mc-boot/GIO.cc: Ditto.
	* mc-boot/GIO.h: Ditto.
	* mc-boot/GIndexing.cc: Ditto.
	* mc-boot/GIndexing.h: Ditto.
	* mc-boot/GM2Dependent.cc: Ditto.
	* mc-boot/GM2Dependent.h: Ditto.
	* mc-boot/GM2EXCEPTION.cc: Ditto.
	* mc-boot/GM2EXCEPTION.h: Ditto.
	* mc-boot/GM2RTS.cc: Ditto.
	* mc-boot/GM2RTS.h: Ditto.
	* mc-boot/GMemUtils.cc: Ditto.
	* mc-boot/GMemUtils.h: Ditto.
	* mc-boot/GNumberIO.cc: Ditto.
	* mc-boot/GNumberIO.h: Ditto.
	* mc-boot/GPushBackInput.cc: Ditto.
	* mc-boot/GPushBackInput.h: Ditto.
	* mc-boot/GRTExceptions.cc: Ditto.
	* mc-boot/GRTExceptions.h: Ditto.
	* mc-boot/GRTco.h: Ditto.
	* mc-boot/GRTentity.h: Ditto.
	* mc-boot/GRTint.cc: Ditto.
	* mc-boot/GRTint.h: Ditto.
	* mc-boot/GSArgs.cc: Ditto.
	* mc-boot/GSArgs.h: Ditto.
	* mc-boot/GSFIO.cc: Ditto.
	* mc-boot/GSFIO.h: Ditto.
	* mc-boot/GSYSTEM.h: Ditto.
	* mc-boot/GSelective.h: Ditto.
	* mc-boot/GStdIO.cc: Ditto.
	* mc-boot/GStdIO.h: Ditto.
	* mc-boot/GStorage.cc: Ditto.
	* mc-boot/GStorage.h: Ditto.
	* mc-boot/GStrCase.cc: Ditto.
	* mc-boot/GStrCase.h: Ditto.
	* mc-boot/GStrIO.cc: Ditto.
	* mc-boot/GStrIO.h: Ditto.
	* mc-boot/GStrLib.cc: Ditto.
	* mc-boot/GStrLib.h: Ditto.
	* mc-boot/GStringConvert.cc: Ditto.
	* mc-boot/GStringConvert.h: Ditto.
	* mc-boot/GSysExceptions.h: Ditto.
	* mc-boot/GSysStorage.cc: Ditto.
	* mc-boot/GSysStorage.h: Ditto.
	* mc-boot/GTimeString.cc: Ditto.
	* mc-boot/GTimeString.h: Ditto.
	* mc-boot/GUnixArgs.h: Ditto.
	* mc-boot/Galists.cc: Ditto.
	* mc-boot/Galists.h: Ditto.
	* mc-boot/Gdecl.cc: Ditto.
	* mc-boot/Gdecl.h: Ditto.
	* mc-boot/Gdtoa.h: Ditto.
	* mc-boot/Gerrno.h: Ditto.
	* mc-boot/Gkeyc.cc: Ditto.
	* mc-boot/Gkeyc.h: Ditto.
	* mc-boot/Gldtoa.h: Ditto.
	* mc-boot/Glibc.h: Ditto.
	* mc-boot/Glibm.h: Ditto.
	* mc-boot/Glists.cc: Ditto.
	* mc-boot/Glists.h: Ditto.
	* mc-boot/GmcComment.cc: Ditto.
	* mc-boot/GmcComment.h: Ditto.
	* mc-boot/GmcComp.cc: Ditto.
	* mc-boot/GmcComp.h: Ditto.
	* mc-boot/GmcDebug.cc: Ditto.
	* mc-boot/GmcDebug.h: Ditto.
	* mc-boot/GmcError.cc: Ditto.
	* mc-boot/GmcError.h: Ditto.
	* mc-boot/GmcFileName.cc: Ditto.
	* mc-boot/GmcFileName.h: Ditto.
	* mc-boot/GmcLexBuf.cc: Ditto.
	* mc-boot/GmcLexBuf.h: Ditto.
	* mc-boot/GmcMetaError.cc: Ditto.
	* mc-boot/GmcMetaError.h: Ditto.
	* mc-boot/GmcOptions.cc: Ditto.
	* mc-boot/GmcOptions.h: Ditto.
	* mc-boot/GmcPreprocess.cc: Ditto.
	* mc-boot/GmcPreprocess.h: Ditto.
	* mc-boot/GmcPretty.cc: Ditto.
	* mc-boot/GmcPretty.h: Ditto.
	* mc-boot/GmcPrintf.cc: Ditto.
	* mc-boot/GmcPrintf.h: Ditto.
	* mc-boot/GmcQuiet.cc: Ditto.
	* mc-boot/GmcQuiet.h: Ditto.
	* mc-boot/GmcReserved.cc: Ditto.
	* mc-boot/GmcReserved.h: Ditto.
	* mc-boot/GmcSearch.cc: Ditto.
	* mc-boot/GmcSearch.h: Ditto.
	* mc-boot/GmcStack.cc: Ditto.
	* mc-boot/GmcStack.h: Ditto.
	* mc-boot/GmcStream.cc: Ditto.
	* mc-boot/GmcStream.h: Ditto.
	* mc-boot/Gmcflex.h: Ditto.
	* mc-boot/Gmcp1.cc: Ditto.
	* mc-boot/Gmcp1.h: Ditto.
	* mc-boot/Gmcp2.cc: Ditto.
	* mc-boot/Gmcp2.h: Ditto.
	* mc-boot/Gmcp3.cc: Ditto.
	* mc-boot/Gmcp3.h: Ditto.
	* mc-boot/Gmcp4.cc: Ditto.
	* mc-boot/Gmcp4.h: Ditto.
	* mc-boot/Gmcp5.cc: Ditto.
	* mc-boot/Gmcp5.h: Ditto.
	* mc-boot/GnameKey.cc: Ditto.
	* mc-boot/GnameKey.h: Ditto.
	* mc-boot/GsymbolKey.cc: Ditto.
	* mc-boot/GsymbolKey.h: Ditto.
	* mc-boot/Gtermios.h: Ditto.
	* mc-boot/Gtop.cc: Ditto.
	* mc-boot/Gvarargs.cc: Ditto.
	* mc-boot/Gvarargs.h: Ditto.
	* mc-boot/Gwlists.cc: Ditto.
	* mc-boot/Gwlists.h: Ditto.
	* mc-boot/Gwrapc.h: Ditto.
	* mc/keyc.mod (checkGccConfigSystem): Add
	#define INCLUDE_MEMORY.
	* pge-boot/GASCII.cc: Regenerate.
	* pge-boot/GASCII.h: Ditto.
	* pge-boot/GArgs.cc: Ditto.
	* pge-boot/GArgs.h: Ditto.
	* pge-boot/GAssertion.cc: Ditto.
	* pge-boot/GAssertion.h: Ditto.
	* pge-boot/GBreak.h: Ditto.
	* pge-boot/GCmdArgs.h: Ditto.
	* pge-boot/GDebug.cc: Ditto.
	* pge-boot/GDebug.h: Ditto.
	* pge-boot/GDynamicStrings.cc: Ditto.
	* pge-boot/GDynamicStrings.h: Ditto.
	* pge-boot/GEnvironment.h: Ditto.
	* pge-boot/GFIO.cc: Ditto.
	* pge-boot/GFIO.h: Ditto.
	* pge-boot/GFormatStrings.h: Ditto.
	* pge-boot/GFpuIO.h: Ditto.
	* pge-boot/GIO.cc: Ditto.
	* pge-boot/GIO.h: Ditto.
	* pge-boot/GIndexing.cc: Ditto.
	* pge-boot/GIndexing.h: Ditto.
	* pge-boot/GLists.cc: Ditto.
	* pge-boot/GLists.h: Ditto.
	* pge-boot/GM2Dependent.cc: Ditto.
	* pge-boot/GM2Dependent.h: Ditto.
	* pge-boot/GM2EXCEPTION.cc: Ditto.
	* pge-boot/GM2EXCEPTION.h: Ditto.
	* pge-boot/GM2RTS.cc: Ditto.
	* pge-boot/GM2RTS.h: Ditto.
	* pge-boot/GNameKey.cc: Ditto.
	* pge-boot/GNameKey.h: Ditto.
	* pge-boot/GNumberIO.cc: Ditto.
	* pge-boot/GNumberIO.h: Ditto.
	* pge-boot/GOutput.cc: Ditto.
	* pge-boot/GOutput.h: Ditto.
	* pge-boot/GPushBackInput.cc: Ditto.
	* pge-boot/GPushBackInput.h: Ditto.
	* pge-boot/GRTExceptions.cc: Ditto.
	* pge-boot/GRTExceptions.h: Ditto.
	* pge-boot/GSArgs.h: Ditto.
	* pge-boot/GSEnvironment.h: Ditto.
	* pge-boot/GSFIO.cc: Ditto.
	* pge-boot/GSFIO.h: Ditto.
	* pge-boot/GSYSTEM.h: Ditto.
	* pge-boot/GScan.h: Ditto.
	* pge-boot/GStdIO.cc: Ditto.
	* pge-boot/GStdIO.h: Ditto.
	* pge-boot/GStorage.cc: Ditto.
	* pge-boot/GStorage.h: Ditto.
	* pge-boot/GStrCase.cc: Ditto.
	* pge-boot/GStrCase.h: Ditto.
	* pge-boot/GStrIO.cc: Ditto.
	* pge-boot/GStrIO.h: Ditto.
	* pge-boot/GStrLib.cc: Ditto.
	* pge-boot/GStrLib.h: Ditto.
	* pge-boot/GStringConvert.h: Ditto.
	* pge-boot/GSymbolKey.cc: Ditto.
	* pge-boot/GSymbolKey.h: Ditto.
	* pge-boot/GSysExceptions.h: Ditto.
	* pge-boot/GSysStorage.cc: Ditto.
	* pge-boot/GSysStorage.h: Ditto.
	* pge-boot/GTimeString.h: Ditto.
	* pge-boot/GUnixArgs.h: Ditto.
	* pge-boot/Gbnflex.cc: Ditto.
	* pge-boot/Gbnflex.h: Ditto.
	* pge-boot/Gdtoa.h: Ditto.
	* pge-boot/Gerrno.h: Ditto.
	* pge-boot/Gldtoa.h: Ditto.
	* pge-boot/Glibc.h: Ditto.
	* pge-boot/Glibm.h: Ditto.
	* pge-boot/Gpge.cc: Ditto.
	* pge-boot/Gtermios.h: Ditto.
	* pge-boot/Gwrapc.h: Ditto.

gcc/objc/ChangeLog:
	PR other/116613
	* objc-act.cc: Add #define INCLUDE_MEMORY.
	* objc-encoding.cc: Likewise.
	* objc-gnu-runtime-abi-01.cc: Likewise.
	* objc-lang.cc: Likewise.
	* objc-next-runtime-abi-01.cc: Likewise.
	* objc-next-runtime-abi-02.cc: Likewise.
	* objc-runtime-shared-support.cc: Likewise.

gcc/objcp/ChangeLog:: Add #define INCLUDE_MEMORY.
	PR other/116613
	* objcp-decl.cc
	* objcp-lang.cc: Likewise.

gcc/rust/ChangeLog:
	PR other/116613
	* resolve/rust-ast-resolve-expr.cc: Add #define INCLUDE_MEMORY.
	* rust-attribs.cc: Likewise.
	* rust-system.h: Likewise.

gcc/ChangeLog:
	PR other/116613
	* asan.cc: Add #define INCLUDE_MEMORY.
	* attribs.cc: Likewise.
	(attr_access::array_as_string): Use
	diagnostic_context::clone_printer and use unique_ptr.
	* auto-profile.cc: Add #define INCLUDE_MEMORY.
	* calls.cc: Likewise.
	* cfganal.cc: Likewise.
	* cfgexpand.cc: Likewise.
	* cfghooks.cc: Likewise.
	* cfgloop.cc: Likewise.
	* cgraph.cc: Likewise.
	* cgraphclones.cc: Likewise.
	* cgraphunit.cc: Likewise.
	* collect-utils.cc: Likewise.
	* collect2.cc: Likewise.
	* common/config/aarch64/aarch64-common.cc: Likewise.
	* common/config/arm/arm-common.cc: Likewise.
	* common/config/avr/avr-common.cc: Likewise.
	* config/aarch64/aarch64-cc-fusion.cc: Likewise.
	* config/aarch64/aarch64-early-ra.cc: Likewise.
	* config/aarch64/aarch64-sve-builtins.cc: Likewise.
	* config/arc/arc.cc: Likewise.
	* config/arm/aarch-common.cc: Likewise.
	* config/arm/arm-mve-builtins.cc: Likewise.
	* config/avr/avr-devices.cc: Likewise.
	* config/avr/driver-avr.cc: Likewise.
	* config/bpf/bpf.cc: Likewise.
	* config/bpf/btfext-out.cc: Likewise.
	* config/bpf/core-builtins.cc: Likewise.
	* config/darwin.cc: Likewise.
	* config/i386/driver-i386.cc: Likewise.
	* config/i386/i386-builtins.cc: Likewise.
	* config/i386/i386-expand.cc: Likewise.
	* config/i386/i386-features.cc: Likewise.
	* config/i386/i386-options.cc: Likewise.
	* config/loongarch/loongarch-builtins.cc: Likewise.
	* config/mingw/winnt-cxx.cc: Likewise.
	* config/mingw/winnt.cc: Likewise.
	* config/mips/mips.cc: Likewise.
	* config/msp430/driver-msp430.cc: Likewise.
	* config/nvptx/mkoffload.cc: Likewise.
	* config/nvptx/nvptx.cc: Likewise.
	* config/riscv/riscv-avlprop.cc: Likewise.
	* config/riscv/riscv-vector-builtins.cc: Likewise.
	* config/riscv/riscv-vsetvl.cc: Likewise.
	* config/rs6000/driver-rs6000.cc: Likewise.
	* config/rs6000/host-darwin.cc: Likewise.
	* config/rs6000/rs6000-c.cc: Likewise.
	* config/s390/s390-c.cc: Likewise.
	* config/s390/s390.cc: Likewise.
	* config/sol2-cxx.cc: Likewise.
	* config/vms/vms-c.cc: Likewise.
	* config/xtensa/xtensa-dynconfig.cc: Likewise.
	* coroutine-passes.cc: Likewise.
	* coverage.cc: Likewise.
	* data-streamer-in.cc: Likewise.
	* data-streamer-out.cc: Likewise.
	* data-streamer.cc: Likewise.
	* diagnostic-buffer.h (diagnostic_buffer::~diagnostic_buffer):
	Delete.
	(diagnostic_buffer::m_per_format_buffer): Use std::unique_ptr.
	* diagnostic-client-data-hooks.h (make_compiler_data_hooks): Use
	std::unique_ptr for return type.
	* diagnostic-format-json.cc
	(json_output_format::make_per_format_buffer): Likewise.
	(diagnostic_output_format_init_json): Update for usage of
	std::unique_ptr in set_output_format.
	* diagnostic-format-sarif.cc
	(sarif_output_format::make_per_format_buffer): Use std::unique_ptr
	for return type.
	(diagnostic_output_format_init_sarif): Update for usage of
	std::unique_ptr.
	(test_message_with_embedded_link): Likewise for set_urlifier.
	* diagnostic-format-text.cc: Add #define INCLUDE_MEMORY.  Include
	"make-unique.h".
	(diagnostic_text_output_format::set_buffer): Use std::unique_ptr.
	* diagnostic-format-text.h
	(diagnostic_text_output_format::set_buffer): Likewise.
	* diagnostic-format.h
	(diagnostic_output_format::make_per_format_buffer): Likewise.
	* diagnostic-global-context.cc:
	* diagnostic-macro-unwinding.cc: Likewise.
	* diagnostic-show-locus.cc: Likewise.
	* diagnostic-spec.cc: Likewise.
	* diagnostic.cc (diagnostic_context::set_output_format): Use
	std::unique_ptr for input.
	(diagnostic_context::set_client_data_hooks): Likewise.
	(diagnostic_context::set_option_manager): Likewise.
	(diagnostic_context::set_urlifier): Likewise.
	(diagnostic_context::set_diagnostic_buffer): Update for use of
	std::unique_ptr.
	(diagnostic_buffer::diagnostic_buffer): Likewise.
	(diagnostic_buffer::~diagnostic_buffer): Delete.
	* diagnostic.h: Complain if INCLUDE_MEMORY was not defined.
	(diagnostic_context::set_output_format): Use std::unique_ptr for
	input.
	(diagnostic_context::set_client_data_hooks): Likewise.
	(diagnostic_context::set_option_manager): Likewise.
	(diagnostic_context::set_urlifier): Likewise.
	(diagnostic_context::clone_printer): New.
	(diagnostic_context::m_printer): Update comment.
	(diagnostic_context::m_option_mgr): Likewise.
	(diagnostic_context::m_urlifier): Likewise.
	(diagnostic_context::m_edit_context_ptr): Likewise.
	(diagnostic_context::m_output_format): Likewise.
	(diagnostic_context::m_client_data_hooks): Likewise.
	(diagnostic_context::m_theme): Likewise.
	* digraph.cc: Add #define INCLUDE_MEMORY.
	* dwarf2out.cc: Likewise.
	* edit-context.cc: Likewise.
	* except.cc: Likewise.
	* expr.cc: Likewise.
	* file-prefix-map.cc: Likewise.
	* final.cc: Likewise.
	* fwprop.cc: Likewise.
	* gcc-plugin.h: Likewise.
	* gcc-rich-location.cc: Likewise.
	* gcc-urlifier.cc: Likewise.  Add #include "make-unique.h".
	(make_gcc_urlifier): Use std::unique_ptr and ::make_unique.
	* gcc-urlifier.h (make_gcc_urlifier): Use std::unique_ptr.
	* gcc.cc: Add #define INCLUDE_MEMORY.  Include
	"pretty-print-urlifier.h".
	* gcov-dump.cc: Add #define INCLUDE_MEMORY.
	* gcov-tool.cc: Likewise.
	* gengtype.cc (open_base_files): Likewise to output.
	* genmatch.cc: Likewise.
	* gimple-fold.cc: Likewise.
	* gimple-harden-conditionals.cc: Likewise.
	* gimple-harden-control-flow.cc: Likewise.
	* gimple-if-to-switch.cc: Likewise.
	* gimple-lower-bitint.cc: Likewise.
	* gimple-predicate-analysis.cc: Likewise.
	* gimple-pretty-print.cc: Likewise.
	* gimple-range-cache.cc: Likewise.
	* gimple-range-edge.cc: Likewise.
	* gimple-range-fold.cc: Likewise.
	* gimple-range-gori.cc: Likewise.
	* gimple-range-infer.cc: Likewise.
	* gimple-range-op.cc: Likewise.
	* gimple-range-path.cc: Likewise.
	* gimple-range-phi.cc: Likewise.
	* gimple-range-trace.cc: Likewise.
	* gimple-range.cc: Likewise.
	* gimple-ssa-backprop.cc: Likewise.
	* gimple-ssa-sprintf.cc: Likewise.
	* gimple-ssa-store-merging.cc: Likewise.
	* gimple-ssa-strength-reduction.cc: Likewise.
	* gimple-ssa-warn-access.cc: Likewise.
	* gimple-ssa-warn-alloca.cc: Likewise.
	* gimple-ssa-warn-restrict.cc: Likewise.
	* gimple-streamer-in.cc: Likewise.
	* gimple-streamer-out.cc: Likewise.
	* gimple.cc: Likewise.
	* gimplify.cc: Likewise.
	* graph.cc: Likewise.
	* graphviz.cc: Likewise.
	* input.cc: Likewise.
	* ipa-cp.cc: Likewise.
	* ipa-devirt.cc: Likewise.
	* ipa-fnsummary.cc: Likewise.
	* ipa-free-lang-data.cc: Likewise.
	* ipa-icf-gimple.cc: Likewise.
	* ipa-icf.cc: Likewise.
	* ipa-inline-analysis.cc: Likewise.
	* ipa-inline.cc: Likewise.
	* ipa-modref-tree.cc: Likewise.
	* ipa-modref.cc: Likewise.
	* ipa-param-manipulation.cc: Likewise.
	* ipa-polymorphic-call.cc: Likewise.
	* ipa-predicate.cc: Likewise.
	* ipa-profile.cc: Likewise.
	* ipa-prop.cc: Likewise.
	* ipa-pure-const.cc: Likewise.
	* ipa-reference.cc: Likewise.
	* ipa-split.cc: Likewise.
	* ipa-sra.cc: Likewise.
	* ipa-strub.cc: Likewise.
	* ipa-utils.cc: Likewise.
	* langhooks.cc: Likewise.
	* late-combine.cc: Likewise.
	* lto-cgraph.cc: Likewise.
	* lto-compress.cc: Likewise.
	* lto-opts.cc: Likewise.
	* lto-section-in.cc: Likewise.
	* lto-section-out.cc: Likewise.
	* lto-streamer-in.cc: Likewise.
	* lto-streamer-out.cc: Likewise.
	* lto-streamer.cc: Likewise.
	* lto-wrapper.cc: Likewise.  Include "make-unique.h".
	(main): Use ::make_unique when creating option manager.
	* multiple_target.cc: Likewise.
	* omp-expand.cc: Likewise.
	* omp-general.cc: Likewise.
	* omp-low.cc: Likewise.
	* omp-oacc-neuter-broadcast.cc: Likewise.
	* omp-offload.cc: Likewise.
	* omp-simd-clone.cc: Likewise.
	* optc-gen.awk: Likewise in output.
	* optc-save-gen.awk: Likewise in output.
	* options-urls-cc-gen.awk: Likewise in output.
	* opts-common.cc: Likewise.
	* opts-global.cc: Likewise.
	* opts.cc: Likewise.
	* pair-fusion.cc: Likewise.
	* passes.cc: Likewise.
	* pointer-query.cc: Likewise.
	* predict.cc: Likewise.
	* pretty-print.cc (pretty_printer::clone): Use std::unique_ptr and
	::make_unique.
	* pretty-print.h: Complain if INCLUDE_MEMORY is not defined.
	(pretty_printer::clone): Use std::unique_ptr.
	* print-rtl.cc: Add #define INCLUDE_MEMORY.
	* print-tree.cc: Likewise.
	* profile-count.cc: Likewise.
	* range-op-float.cc: Likewise.
	* range-op-ptr.cc: Likewise.
	* range-op.cc: Likewise.
	* range.cc: Likewise.
	* read-rtl-function.cc: Likewise.
	* rtl-error.cc: Likewise.
	* rtl-ssa/accesses.cc: Likewise.
	* rtl-ssa/blocks.cc: Likewise.
	* rtl-ssa/changes.cc: Likewise.
	* rtl-ssa/functions.cc: Likewise.
	* rtl-ssa/insns.cc: Likewise.
	* rtl-ssa/movement.cc: Likewise.
	* rtl-tests.cc: Likewise.
	* sanopt.cc: Likewise.
	* sched-rgn.cc: Likewise.
	* selftest-diagnostic-path.cc: Likewise.
	* selftest-diagnostic.cc: Likewise.
	* splay-tree-utils.cc: Likewise.
	* sreal.cc: Likewise.
	* stmt.cc: Likewise.
	* substring-locations.cc: Likewise.
	* symtab-clones.cc: Likewise.
	* symtab-thunks.cc: Likewise.
	* symtab.cc: Likewise.
	* text-art/box-drawing.cc: Likewise.
	* text-art/canvas.cc: Likewise.
	* text-art/ruler.cc: Likewise.
	* text-art/selftests.cc: Likewise.
	* text-art/theme.cc: Likewise.
	* toplev.cc: Likewise.  Include "make-unique.h".
	(general_init): Use ::make_unique when setting option_manager.
	* trans-mem.cc: Add #define INCLUDE_MEMORY.
	* tree-affine.cc: Likewise.
	* tree-call-cdce.cc: Likewise.
	* tree-cfg.cc: Likewise.
	* tree-chrec.cc: Likewise.
	* tree-dfa.cc: Likewise.
	* tree-diagnostic-client-data-hooks.cc: Include "make-unique.h".
	(make_compiler_data_hooks): Use std::unique_ptr and ::make_unique.
	* tree-diagnostic.cc: Add #define INCLUDE_MEMORY.
	* tree-dump.cc: Likewise.
	* tree-inline.cc: Likewise.
	* tree-into-ssa.cc: Likewise.
	* tree-logical-location.cc: Likewise.
	* tree-nested.cc: Likewise.
	* tree-nrv.cc: Likewise.
	* tree-object-size.cc: Likewise.
	* tree-outof-ssa.cc: Likewise.
	* tree-pretty-print.cc: Likewise.
	* tree-profile.cc: Likewise.
	* tree-scalar-evolution.cc: Likewise.
	* tree-sra.cc: Likewise.
	* tree-ssa-address.cc: Likewise.
	* tree-ssa-alias.cc: Likewise.
	* tree-ssa-ccp.cc: Likewise.
	* tree-ssa-coalesce.cc: Likewise.
	* tree-ssa-copy.cc: Likewise.
	* tree-ssa-dce.cc: Likewise.
	* tree-ssa-dom.cc: Likewise.
	* tree-ssa-forwprop.cc: Likewise.
	* tree-ssa-ifcombine.cc: Likewise.
	* tree-ssa-loop-ch.cc: Likewise.
	* tree-ssa-loop-im.cc: Likewise.
	* tree-ssa-loop-manip.cc: Likewise.
	* tree-ssa-loop-niter.cc: Likewise.
	* tree-ssa-loop-split.cc: Likewise.
	* tree-ssa-math-opts.cc: Likewise.
	* tree-ssa-operands.cc: Likewise.
	* tree-ssa-phiprop.cc: Likewise.
	* tree-ssa-pre.cc: Likewise.
	* tree-ssa-propagate.cc: Likewise.
	* tree-ssa-reassoc.cc: Likewise.
	* tree-ssa-sccvn.cc: Likewise.
	* tree-ssa-scopedtables.cc: Likewise.
	* tree-ssa-sink.cc: Likewise.
	* tree-ssa-strlen.cc: Likewise.
	* tree-ssa-structalias.cc: Likewise.
	* tree-ssa-ter.cc: Likewise.
	* tree-ssa-uninit.cc: Likewise.
	* tree-ssa.cc: Likewise.
	* tree-ssanames.cc: Likewise.
	* tree-stdarg.cc: Likewise.
	* tree-streamer-in.cc: Likewise.
	* tree-streamer-out.cc: Likewise.
	* tree-streamer.cc: Likewise.
	* tree-switch-conversion.cc: Likewise.
	* tree-tailcall.cc: Likewise.
	* tree-vrp.cc: Likewise.
	* tree.cc: Likewise.
	* ubsan.cc: Likewise.
	* value-pointer-equiv.cc: Likewise.
	* value-prof.cc: Likewise.
	* value-query.cc: Likewise.
	* value-range-pretty-print.cc: Likewise.
	* value-range-storage.cc: Likewise.
	* value-range.cc: Likewise.
	* value-relation.cc: Likewise.
	* var-tracking.cc: Likewise.
	* varpool.cc: Likewise.
	* vr-values.cc: Likewise.
	* wide-int-print.cc: Likewise.

gcc/testsuite/ChangeLog:
	PR other/116613
	* gcc.dg/plugin/diagnostic_group_plugin.c: Update for use of
	std::unique_ptr.
	* gcc.dg/plugin/diagnostic_plugin_xhtml_format.c: Likewise.
	* gcc.dg/plugin/ggcplug.c: Likewise.

libgcc/ChangeLog:
	PR other/116613
	* libgcov-util.c: Add #define INCLUDE_MEMORY.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Co-authored-by: Gaius Mulley <gaiusmod2@gmail.com>
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-10-24 11:48:01 -04:00
Alejandro Colomar
1157765994 gcc/: Rename array_type_nelts => array_type_nelts_minus_one
The old name was misleading.

While at it, also rename some temporary variables that are used with
this function, for consistency.

Link: <https://inbox.sourceware.org/gcc-patches/9fffd80-dca-2c7e-14b-6c9b509a7215@redhat.com/T/#m2f661c67c8f7b2c405c8c7fc3152dd85dc729120>

gcc/ChangeLog:

	* tree.cc (array_type_nelts, array_type_nelts_minus_one)
	* tree.h (array_type_nelts, array_type_nelts_minus_one)
	* expr.cc (count_type_elements)
	* config/aarch64/aarch64.cc
	(pure_scalable_type_info::analyze_array)
	* config/i386/i386.cc (ix86_canonical_va_list_type):
	Rename array_type_nelts => array_type_nelts_minus_one
	The old name was misleading.

gcc/c/ChangeLog:

	* c-decl.cc (one_element_array_type_p, get_parm_array_spec)
	* c-fold.cc (c_fold_array_ref):
	Rename array_type_nelts => array_type_nelts_minus_one

gcc/cp/ChangeLog:

	* decl.cc (reshape_init_array)
	* init.cc
	(build_zero_init_1)
	(build_value_init_noctor)
	(build_vec_init)
	(build_delete)
	* lambda.cc (add_capture)
	* tree.cc (array_type_nelts_top):
	Rename array_type_nelts => array_type_nelts_minus_one

gcc/fortran/ChangeLog:

	* trans-array.cc (structure_alloc_comps)
	* trans-openmp.cc
	(gfc_walk_alloc_comps)
	(gfc_omp_clause_linear_ctor):
	Rename array_type_nelts => array_type_nelts_minus_one

gcc/rust/ChangeLog:

	* backend/rust-tree.cc (array_type_nelts_top):
	Rename array_type_nelts => array_type_nelts_minus_one

Suggested-by: Richard Biener <richard.guenther@gmail.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-10-18 22:39:20 +00:00
Nathaniel Shead
cb76fcf5eb c++: Add missing auto_diagnostic_groups
This patch goes through all .cc files in gcc/cp and adds in any
auto_diagnostic_groups that seem to be missing by looking for any
'inform' calls that aren't grouped with their respective error/warning.
Now with SARIF output support this seems to be a bit more important.

The patch isn't complete; I've tried to also track helper functions used
for diagnostics to group them, but some may have been missed.
Additionally there are a few functions that are definitely missing
groupings but I wasn't able to see an obvious way to add them without
potentially grouping together unrelated messages.

This list includes:

- lazy_load_{binding,pendings} "during load of {binding,pendings} for"
- cp_finish_decomp "in initialization of structured binding variable"
- require_deduced_type "using __builtin_source_location"
- convert_nontype_argument "in template argument for type %qT"
- coerce_template_params "so any instantiation with a non-empty parameter pack"
- tsubst_default_argument "when instantiating default argument"
- invalid_nontype_parm_type_p "invalid template non-type parameter"

gcc/cp/ChangeLog:

	* class.cc (add_method): Add missing auto_diagnostic_group.
	(handle_using_decl): Likewise.
	(maybe_warn_about_overly_private_class): Likewise.
	(check_field_decl): Likewise.
	(check_field_decls): Likewise.
	(resolve_address_of_overloaded_function): Likewise.
	(note_name_declared_in_class): Likewise.
	* constraint.cc (associate_classtype_constraints): Likewise.
	(diagnose_trait_expr): Clean up whitespace.
	* coroutines.cc (find_coro_traits_template_decl): Add missing
	auto_diagnostic_group.
	(coro_promise_type_found_p): Likewise.
	(coro_diagnose_throwing_fn): Likewise.
	* cvt.cc (build_expr_type_conversion): Likewise.
	* decl.cc (validate_constexpr_redeclaration): Likewise.
	(duplicate_function_template_decls): Likewise.
	(duplicate_decls): Likewise.
	(lookup_label_1): Likewise.
	(check_previous_goto_1): Likewise.
	(check_goto_1): Likewise.
	(make_typename_type): Likewise.
	(make_unbound_class_template): Likewise.
	(check_tag_decl): Likewise.
	(start_decl): Likewise.
	(maybe_commonize_var): Likewise.
	(check_for_uninitialized_const_var): Likewise.
	(reshape_init_class): Likewise.
	(check_initializer): Likewise.
	(cp_finish_decl): Likewise.
	(find_decomp_class_base): Likewise.
	(cp_finish_decomp): Likewise.
	(expand_static_init): Likewise.
	(grokfndecl): Likewise.
	(grokdeclarator): Likewise.
	(check_elaborated_type_specifier): Likewise.
	(lookup_and_check_tag): Likewise.
	(xref_tag): Likewise.
	(cxx_simulate_enum_decl): Likewise.
	(finish_function): Likewise.
	* decl2.cc (check_classfn): Likewise.
	(record_mangling): Likewise.
	(mark_used): Likewise.
	* error.cc (qualified_name_lookup_error): Likewise.
	* except.cc (build_throw): Likewise.
	* init.cc (get_nsdmi): Likewise.
	(diagnose_uninitialized_cst_or_ref_member_1): Likewise.
	(warn_placement_new_too_small): Likewise.
	(build_new_1): Likewise.
	(build_vec_delete_1): Likewise.
	(build_delete): Likewise.
	* lambda.cc (add_capture): Likewise.
	(add_default_capture): Likewise.
	* lex.cc (unqualified_fn_lookup_error): Likewise.
	* method.cc (synthesize_method): Likewise.
	(defaulted_late_check): Likewise.
	* module.cc (trees_in::is_matching_decl): Likewise.
	(trees_in::read_enum_def): Likewise.
	(module_state::check_not_purview): Likewise.
	(module_state::deferred_macro): Likewise.
	(module_state::read_config): Likewise.
	(module_state::check_read): Likewise.
	(declare_module): Likewise.
	(init_modules): Likewise.
	* name-lookup.cc (diagnose_name_conflict): Likewise.
	(lookup_using_decl): Likewise.
	(set_decl_namespace): Likewise.
	(finish_using_directive): Likewise.
	(push_namespace): Likewise.
	(add_imported_namespace): Likewise.
	* parser.cc (cp_parser_check_for_definition_in_return_type): Likewise.
	(cp_parser_userdef_numeric_literal): Likewise.
	(cp_parser_nested_name_specifier_opt): Likewise.
	(cp_parser_new_expression): Likewise.
	(cp_parser_binary_expression): Likewise.
	(cp_parser_lambda_introducer): Likewise.
	(cp_parser_module_declaration): Likewise.
	(cp_parser_import_declaration): Likewise, removing gotos to
	support this.
	(cp_parser_declaration): Add missing auto_diagnostic_group.
	(cp_parser_decl_specifier_seq): Likewise.
	(cp_parser_template_id): Likewise.
	(cp_parser_template_name): Likewise.
	(cp_parser_explicit_specialization): Likewise.
	(cp_parser_placeholder_type_specifier): Likewise.
	(cp_parser_elaborated_type_specifier): Likewise.
	(cp_parser_enum_specifier): Likewise.
	(cp_parser_asm_definition): Likewise.
	(cp_parser_init_declarator): Likewise.
	(cp_parser_direct_declarator): Likewise.
	(cp_parser_class_head): Likewise.
	(cp_parser_member_declaration): Likewise.
	(cp_parser_lookup_name): Likewise.
	(cp_parser_explicit_template_declaration): Likewise.
	(cp_parser_check_class_key): Likewise.
	* pt.cc (maybe_process_partial_specialization): Likewise.
	(determine_specialization): Likewise.
	(check_for_bare_parameter_packs): Likewise.
	(check_template_shadow): Likewise.
	(process_partial_specialization): Likewise.
	(push_template_decl): Likewise.
	(redeclare_class_template): Likewise.
	(convert_nontype_argument_function): Likewise.
	(check_valid_ptrmem_cst_expr): Likewise.
	(convert_nontype_argument): Likewise.
	(convert_template_argument): Likewise.
	(coerce_template_parms): Likewise.
	(tsubst_qualified_id): Likewise.
	(tsubst_expr): Likewise.
	(most_specialized_partial_spec): Likewise.
	(do_class_deduction): Likewise.
	(do_auto_deduction): Likewise.
	* search.cc (lookup_member): Likewise.
	* semantics.cc (finish_non_static_data_member): Likewise.
	(process_outer_var_ref): Likewise.
	(finish_id_expression_1): Likewise.
	(finish_offsetof): Likewise.
	(omp_reduction_lookup): Likewise.
	(finish_omp_clauses): Likewise.
	* tree.cc (check_abi_tag_redeclaration): Likewise.
	(check_abi_tag_args): Likewise.
	* typeck.cc (invalid_nonstatic_memfn_p): Likewise.
	(complain_about_unrecognized_member): Likewise.
	(finish_class_member_access_expr): Likewise.
	(error_args_num): Likewise.
	(warn_for_null_address): Likewise.
	(cp_build_binary_op): Likewise.
	(build_x_unary_op): Likewise.
	(cp_build_unary_op): Likewise.
	(build_static_cast): Likewise.
	(cp_build_modify_expr): Likewise.
	(get_delta_difference): Likewise.
	(convert_for_assignment): Widen scope of auto_diagnostic_group.
	(check_return_expr): Add missing auto_diagnostic_group.
	* typeck2.cc (cxx_incomplete_type_diagnostic): Likewise.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Marek Polacek <polacek@redhat.com>
2024-09-05 22:00:51 +10:00
Patrick Palka
5c76139540 c++: lambda in pack expansion [PR115378]
Here find_parameter_packs_r is incorrectly treating the 'auto' return
type of a lambda as a parameter pack due to Concepts-TS specific logic
added in r6-4517, leading to confusion later when expanding the pattern.

Since we intend on removing Concepts TS support soon anyway, this patch
fixes this by restricting the problematic logic with flag_concepts_ts.
Doing so revealed that add_capture was relying on this logic to set
TEMPLATE_TYPE_PARAMETER_PACK for the 'auto' type of an pack expansion
init-capture, which we now need to do explicitly.

	PR c++/115378

gcc/cp/ChangeLog:

	* lambda.cc (lambda_capture_field_type): Set
	TEMPLATE_TYPE_PARAMETER_PACK on the auto type of an init-capture
	pack expansion.
	* pt.cc (find_parameter_packs_r) <case TEMPLATE_TYPE_PARM>:
	Restrict TEMPLATE_TYPE_PARAMETER_PACK promotion with
	flag_concepts_ts.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1y/decltype-auto-103497.C: Adjust expected diagnostic.
	* g++.dg/template/pr95672.C: Likewise.
	* g++.dg/cpp2a/lambda-targ5.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2024-06-07 12:12:30 -04:00
Marek Polacek
46bafd9a6b c++: lambda capturing structured bindings [PR85889]
<https://wg21.link/p1381r1> clarifies that it's OK to capture structured
bindings.

[expr.prim.lambda.capture]/4 says "The identifier in a simple-capture shall
denote a local entity" and [basic.pre]/3: "An entity is a [...] structured
binding".

It doesn't appear that this was made a DR, so, strictly speaking, we
should have a -Wc++20-extensions warning, like clang++.

	PR c++/85889

gcc/cp/ChangeLog:

	* lambda.cc (add_capture): Add a pedwarn for capturing structured
	bindings.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/decomp3.C: Use -Wno-c++20-extensions.
	* g++.dg/cpp1z/decomp60.C: New test.
2024-05-09 12:42:42 -04:00
Patrick Palka
ce67b75e91 c++/modules: reduce lazy loading recursion
It turns out that with modules we can call mangle_decl recursively
which is bad because the global mangling state isn't recursion aware.
The recursion happens from write_closure_type_name, which calls
lambda_function, which performs name lookup, which can trigger lazy
loading, which can call maybe_clone_body for a newly loaded cdtor, which
can inspect DECL_ASSEMBLER_NAME, which enters mangling.  This was
observed when using fmtlib as a module with trunk and it leads to a
bogus "mangling conflicts with a previous mangle error" followed by an
ICE from cdtor_comdat_group due to a mangling mismatch.

This patch fixes this by sidestepping lazy loading when performing the
op() lookup in lambda_function, so that we don't accidentally end up
entering mangling recursively.  This should be safe since the lazy load
should still get triggered by some other name lookup.

In passing it was noticed that lazy loading can get excessively recursive
ultimately due to the name lookups performed from check_local_shadow,
which may trigger lazy loading, which cause us to instantiate/clone
things, which end up calling check_local_shadow.  This patch mitigates
this by implementating an optimization suggested by Jason:

> I think we shouldn't bother with check_local_shadow in a clone or
> instantiation, only when actually parsing.

This reduces the maximum depth of lazy loading recursion for a simple
modular Hello World from ~115 to ~12.

gcc/cp/ChangeLog:

	* lambda.cc (lambda_function): Call get_class_binding_direct
	instead of lookup_member to sidestep lazy loading.
	* name-lookup.cc (check_local_shadow): Punt if we're in a
	function context that's not actual parsing.

Reviewed-by: Jason Merill <jason@redhat.com>
2024-02-13 14:26:37 -05:00
waffl3x
07d09f0af1 c++: P0847R7 (deducing this) - xobj lambdas. [PR102609]
This implements support for xobj lambdas.  There are extensive tests
included, but not exhaustive.  Dependent lambdas should work and have been
tested lightly, but we need more exhaustive tests for them.

	PR c++/102609

gcc/cp/ChangeLog:

	PR c++/102609
	C++23 P0847R7 (deducing this) - xobj lambdas.
	* lambda.cc (build_capture_proxy): Don't fold direct object types.
	* parser.cc (cp_parser_lambda_declarator_opt): Handle xobj lambdas,
	diagnostics.  Comments also updated.
	* pt.cc (tsubst_function_decl): Handle xobj lambdas.  Check object
	type of xobj lambda call operator, diagnose incorrect types.
	(tsubst_lambda_expr): Update comment.
	* semantics.cc (finish_decltype_type): Also consider by-value object
	parameter qualifications.

gcc/testsuite/ChangeLog:

	PR c++/102609
	C++23 P0847R7 (deducing this) - xobj lambdas.
	* g++.dg/cpp23/explicit-obj-diagnostics8.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda1.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda10.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda11.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda12.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda13.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda2.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda3.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda4.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda5.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda6.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda7.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda8.C: New test.
	* g++.dg/cpp23/explicit-obj-lambda9.C: New test.

Signed-off-by: Waffl3x <waffl3x@protonmail.com>
2024-01-09 15:59:04 -05:00
waffl3x
f9fbf93dc8 c++: P0847R7 (deducing this) - prerequisite changes. [PR102609]
Adds the xobj_flag member to lang_decl_fn and a corresponding member access
macro and predicate to support the addition of explicit object member
functions. Additionally, since explicit object member functions are also
non-static member functions, we need to change uses of
DECL_NONSTATIC_MEMBER_FUNCTION_P to clarify whether they intend to include
or exclude them.

	PR c++/102609

gcc/cp/ChangeLog:

	* cp-tree.h (struct lang_decl_fn): New data member.
	(DECL_NONSTATIC_MEMBER_FUNCTION_P): Poison.
	(DECL_IOBJ_MEMBER_FUNCTION_P): Define.
	(DECL_FUNCTION_XOBJ_FLAG): Define.
	(DECL_XOBJ_MEMBER_FUNCTION_P): Define.
	(DECL_OBJECT_MEMBER_FUNCTION_P): Define.
	(DECL_FUNCTION_MEMBER_P): Don't use
	DECL_NONSTATIC_MEMBER_FUNCTION_P.
	(DECL_CONST_MEMFUNC_P): Likewise.
	(DECL_VOLATILE_MEMFUNC_P): Likewise.
	(DECL_NONSTATIC_MEMBER_P): Likewise.
	* module.cc (trees_out::lang_decl_bools): Handle xobj_flag.
	(trees_in::lang_decl_bools): Handle xobj_flag.
	* call.cc (build_this_conversion)
	(add_function_candidate)
	(add_template_candidate_real)
	(add_candidates)
	(maybe_warn_class_memaccess)
	(cand_parms_match)
	(joust)
	(do_warn_dangling_reference)
	* class.cc (finalize_literal_type_property)
	(finish_struct)
	(resolve_address_of_overloaded_function)
	* constexpr.cc (is_valid_constexpr_fn)
	(cxx_bind_parameters_in_call)
	* contracts.cc (build_contract_condition_function)
	* cp-objcp-common.cc (cp_decl_dwarf_attribute)
	* cxx-pretty-print.cc (cxx_pretty_printer::postfix_expression)
	(cxx_pretty_printer::declaration_specifiers)
	(cxx_pretty_printer::direct_declarator)
	* decl.cc (cp_finish_decl)
	(grok_special_member_properties)
	(start_preparsed_function)
	(record_key_method_defined)
	* decl2.cc (cp_handle_deprecated_or_unavailable)
	* init.cc (find_uninit_fields_r)
	(build_offset_ref)
	* lambda.cc (lambda_expr_this_capture)
	(maybe_generic_this_capture)
	(nonlambda_method_basetype)
	* mangle.cc (write_nested_name)
	* method.cc (early_check_defaulted_comparison)
	(skip_artificial_parms_for)
	(num_artificial_parms_for)
	* pt.cc (is_specialization_of_friend)
	(determine_specialization)
	(copy_default_args_to_explicit_spec)
	(check_explicit_specialization)
	(tsubst_contract_attribute)
	(check_non_deducible_conversions)
	(more_specialized_fn)
	(maybe_instantiate_noexcept)
	(register_parameter_specializations)
	(value_dependent_expression_p)
	* search.cc (shared_member_p)
	(lookup_member)
	(field_access_p)
	* semantics.cc (finish_omp_declare_simd_methods)
	* tree.cc (lvalue_kind)
	* typeck.cc (invalid_nonstatic_memfn_p): Don't use
	DECL_NONSTATIC_MEMBER_FUNCTION_P.

libcc1/ChangeLog:

	* libcp1plugin.cc (plugin_pragma_push_user_expression): Don't use
	DECL_NONSTATIC_MEMBER_FUNCTION_P.

Signed-off-by: Waffl3x <waffl3x@protonmail.com>
Co-authored-by: Jason Merrill <jason@redhat.com>
2024-01-09 15:59:04 -05:00
Jakub Jelinek
a945c346f5 Update copyright years. 2024-01-03 12:19:35 +01:00
Jakub Jelinek
6c9973e46b c++: Implement C++26 P2169R4 - Placeholder variables with no name [PR110349]
The following patch implements the C++26 P2169R4 paper.
As written in the PR, the patch expects that:
1) https://eel.is/c++draft/expr.prim.lambda.capture#2
   "Ignoring appearances in initializers of init-captures, an identifier
    or this shall not appear more than once in a lambda-capture."
   is adjusted such that name-independent lambda captures with initializers
   can violate this rule (but lambda captures which aren't name-independent
   can't appear after name-independent ones)
2) https://eel.is/c++draft/class.mem#general-5
   "A member shall not be declared twice in the member-specification,
    except that"
   having an exception that name-independent non-static data member
   declarations can appear multiple times (but again, if there is
   a member which isn't name-independent, it can't appear after
   name-independent ones)
3) it assumes that any name-independent declarations which weren't
   previously valid result in the _ lookups being ambiguous, not just
   if there are 2 _ declarations in the same scope, in particular the
   https://eel.is/c++draft/basic.scope#block-2 mentioned cases
4) it assumes that _ in static function/block scope structured bindings
   is never name-independent like in namespace scope structured bindings;
   it matches clang behavior and is consistent with e.g. static type _;
   not being name-independent both at namespace scope and at function/block
   scope

As you preferred in the PR, for local scope bindings, the ambiguous cases
use a TREE_LIST with the ambiguous cases which can often be directly fed
into print_candidates.  For member_vec after sorting/deduping, I chose to use
instead OVERLOAD with a new flag but only internally inside of the
member_vec, get_class_binding_direct turns it into a TREE_LIST.  There are
2 reasons for that, in order to keep the member_vec binary search fast, I
think it is better to keep OVL_NAME usable on all elements because having
to special case TREE_LIST would slow everything down, and the callers need
to be able to chain the results anyway and so need an unshared TREE_LIST
they can tweak/destroy anyway.
name-independent declarations (even in older standards) will not have
-Wunused{,-variable,-but-set-variable} or -Wshadow* warnings diagnosed, but
unlike e.g. the clang implementation, this patch does diagnose
-Wunused-parameter for parameters with _ names because they aren't
name-independent and one can just omit their name instead.

2023-11-30  Jakub Jelinek  <jakub@redhat.com>

	PR c++/110349
gcc/c-family/
	* c-cppbuiltin.cc (c_cpp_builtins): Predefine
	__cpp_placeholder_variables=202306L for C++26.
gcc/cp/
	* cp-tree.h: Implement C++26 P2169R4 - Placeholder variables with no
	name.
	(OVL_NAME_INDEPENDENT_DECL_P): Define.
	(add_capture): Add unsigned * argument.
	(name_independent_decl_p): New inline function.
	* name-lookup.cc (class name_lookup): Make ambiguous and
	add_value members public.
	(name_independent_linear_search): New function.
	(get_class_binding_direct): Handle member_vec_binary_search
	returning OVL_NAME_INDEPENDENT_DECL_P OVERLOAD.  Use
	name_independent_linear_search rather than fields_linear_search
	for linear lookup of _ name if !want_type.
	(member_name_cmp): Sort name-independent declarations first.
	(member_vec_dedup): Handle name-independent declarations.
	(pop_local_binding): Handle binding->value being a TREE_LIST for
	ambiguous name-independent declarations.
	(supplement_binding): Handle name-independent declarations.
	(update_binding): Likewise.
	(check_local_shadow): Return tree rather than void, normally
	NULL_TREE but old for name-independent declarations which used
	to conflict with outer scope declaration.  Don't emit -Wshadow*
	warnings for name-independent declarations.
	(pushdecl): Handle name-independent declarations.
	* search.cc (lookup_field_r): Handle nval being a TREE_LIST.
	* lambda.cc (build_capture_proxy): Adjust for ___.<number>
	names of members.
	(add_capture): Add NAME_INDEPENDENT_CNT argument.  Use ___.<number>
	name rather than ___ for second and following capture with
	_ name.
	(add_default_capture): Adjust add_capture caller.
	* decl.cc (poplevel): Don't warn about name-independent declarations.
	(duplicate_decls): If in C++26 a _ named declaration conflicts with
	earlier declarations, emit explaining note why the new declaration
	is not name-independent.
	(reshape_init_class): If field is a TREE_LIST, emit an ambiguity
	error with list of candidates rather than error about non-existing
	non-static data member.
	* parser.cc (cp_parser_lambda_introducer): Adjust add_capture callers.
	Allow name-independent capture redeclarations.
	(cp_parser_decomposition_declaration): Set decl_specs.storage_class
	to sc_static for static structured bindings.
	* pt.cc (tsubst_lambda_expr): Adjust add_capture caller.
gcc/testsuite/
	* g++.dg/cpp26/name-independent-decl1.C: New test.
	* g++.dg/cpp26/name-independent-decl2.C: New test.
	* g++.dg/cpp26/name-independent-decl3.C: New test.
	* g++.dg/cpp26/name-independent-decl4.C: New test.
	* g++.dg/cpp26/name-independent-decl5.C: New test.
	* g++.dg/cpp26/name-independent-decl6.C: New test.
	* g++.dg/cpp26/feat-cxx26.C: Add __cpp_placeholder_variables test.
2023-11-30 09:09:21 +01:00
Jason Merrill
8315f99865 c++: remove LAMBDA_EXPR_MUTABLE_P
In review of the deducing 'this' patch it came up that LAMBDA_EXPR_MUTABLE_P
doesn't make sense for a lambda with an explicit object parameter.  And it
was never necessary, so let's remove it.

gcc/cp/ChangeLog:

	* cp-tree.h (LAMBDA_EXPR_MUTABLE_P): Remove.
	* cp-tree.def: Remove documentation.
	* lambda.cc (build_lambda_expr): Remove reference.
	* parser.cc (cp_parser_lambda_declarator_opt): Likewise.
	* pt.cc (tsubst_lambda_expr): Likewise.
	* ptree.cc (cxx_print_lambda_node): Likewise.
	* semantics.cc (capture_decltype): Get the object quals
	from the object instead.
2023-11-29 23:55:55 -05:00
Marc Poulhiès
721cdcd1dd Trivial typo fix in variadic
Fix all occurences of varadic, except for Rust (will be part of another change).

gcc/ChangeLog:

	* config/nvptx/nvptx.h (struct machine_function): Fix typo in variadic.
	* config/nvptx/nvptx.cc (nvptx_function_arg_advance): Adjust to use fixed name.
	(nvptx_declare_function_name): Likewise.
	(nvptx_call_args): Likewise.
	(nvptx_expand_call): Likewise.

gcc/cp/ChangeLog:

	* lambda.cc (compare_lambda_sig): Fix typo in variadic.

libcpp/ChangeLog:

	* macro.cc (parse_params): Fix typo in variadic.
	(create_iso_definition): Likewise.

Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
2023-11-20 21:39:15 +01:00
Bernhard Reutner-Fischer
8861c80733 c++: use _P() defines from tree.h
gcc/cp/ChangeLog:

	* call.cc (promoted_arithmetic_type_p): Use _P defines from tree.h.
	(build_conditional_expr): Ditto.
	(convert_like_internal): Ditto.
	(convert_arg_to_ellipsis): Ditto.
	(build_over_call): Ditto.
	(compare_ics): Ditto.
	* class.cc (is_empty_base_ref): Ditto.
	* coroutines.cc (rewrite_param_uses): Ditto.
	* cp-tree.h (DECL_DISCRIMINATOR_P): Ditto.
	(ARITHMETIC_TYPE_P): Ditto.
	* cvt.cc (ocp_convert): Ditto.
	* cxx-pretty-print.cc (pp_cxx_template_argument_list): Ditto.
	* decl.cc (layout_var_decl): Ditto.
	(get_tuple_size): Ditto.
	* error.cc (dump_simple_decl): Ditto.
	* lambda.cc (start_lambda_scope): Ditto.
	* mangle.cc (write_template_arg): Ditto.
	* method.cc (spaceship_comp_cat): Ditto.
	* module.cc (node_template_info): Ditto.
	(trees_out::start): Ditto.
	(trees_out::decl_node): Ditto.
	(trees_in::read_var_def): Ditto.
	(set_instantiating_module): Ditto.
	* name-lookup.cc (maybe_record_mergeable_decl): Ditto.
	(consider_decl): Ditto.
	(maybe_add_fuzzy_decl): Ditto.
	* pt.cc (convert_nontype_argument): Ditto.
	* semantics.cc (handle_omp_array_sections_1): Ditto.
	(finish_omp_clauses): Ditto.
	(finish_omp_target_clauses_r): Ditto.
	(is_this_parameter): Ditto.
	* tree.cc (build_cplus_array_type): Ditto.
	(is_this_expression): Ditto.
	* typeck.cc (do_warn_enum_conversions): Ditto.
	* typeck2.cc (store_init_value): Ditto.
	(check_narrowing): Ditto.
2023-05-18 21:49:02 +02:00
Jason Merrill
6f90de9763 c++: constant, array, lambda, template [PR108975]
When a lambda refers to a constant local variable in the enclosing scope, we
tentatively capture it, but if we end up pulling out its constant value, we
go back at the end of the lambda and prune any unneeded captures.  Here
while parsing the template we decided that the dim capture was unneeded,
because we folded it away, but then we brought back the use in the template
trees that try to preserve the source representation with added type info.
So then when we tried to instantiate that use, we couldn't find what it was
trying to use, and crashed.

Fixed by not trying to prune when parsing a template; we'll prune at
instantiation time.

	PR c++/108975

gcc/cp/ChangeLog:

	* lambda.cc (prune_lambda_captures): Don't bother in a template.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/lambda/lambda-const11.C: New test.
2023-03-17 17:32:18 -04:00
Jason Merrill
a915c29a7d c++: constrained lambda error-recovery [PR108972]
Better not to ICE after various valid errors.

	PR c++/108972

gcc/cp/ChangeLog:

	* lambda.cc (compare_lambda_template_head): Check more
	for error_mark_node.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/concepts-lambda3.C: Run at lower std levels,
	but expect errors.
2023-03-10 13:49:45 -05:00
Jakub Jelinek
83ffe9cde7 Update copyright years. 2023-01-16 11:52:17 +01:00
Nathan Sidwell
2b0e81d5cc c++: per-scope, per-signature lambda discriminators
This implements ABI-compliant lambda discriminators.  Not only do we
have per-scope counters, but we also distinguish by lambda signature.
Only lambdas with the same signature will need non-zero
discriminators.  As the discriminator is signature-dependent, we have
to process the lambda function's declaration before we can determine
it.  For templated and generic lambdas the signature is that of the
uninstantiated lambda -- not separate for each instantiation.

With this change, gcc and clang now produce the same lambda manglings
for all these testcases.

	gcc/cp/
	* cp-tree.h (LAMBDA_EXPR_SCOPE_SIG_DISCRIMINATOR): New.
	(struct tree_lambda_expr): Add discriminator_sig bitfield.
	(recrd_lambda_scope_sig_discriminator): Declare.
	* lambda.cc (struct lambda_sig_count): New.
	(lambda_discriminator): Add signature vector.
	(start_lambda_scope): Adjust.
	(compare_lambda_template_head, compare_lambda_sig): New.
	(record_lambda_scope_sig_discriminator): New.
	* mangle.cc (write_closure_type): Use the scope-sig discriminator for
	ABI >= 18.  Emit abi mangling warning if needed.
	* module.cc (trees_out::core_vals): Stream the new discriminator.
	(trees_in::core_vals): Likewise.
	* parser.cc (cp_parser_lambda_declarator_opt): Call
	record_lambda_scope_sig_discriminator.
	* pt.cc (tsubst_lambda_expr): Likewise.
	libcc1/
	* libcp1plugin.cc (plugin_start_lambda_closure_class_type):
	Initialize the per-scope, per-signature discriminator.
	gcc/testsuite/
	* g++.dg/abi/lambda-sig1-18.C: New.
	* g++.dg/abi/lambda-sig1-18vs17.C: New.
	* g++.dg/cpp1y/lambda-mangle-1-18.C: New.
2022-11-01 17:44:36 -04:00
Nathan Sidwell
0122faae30 c++: Reorganize per-scope lambda discriminators
We currently use a per-extra-scope counter to discriminate multiple
lambdas in a particular such scope.  This is not ABI compliant.  This
patch merely refactors the existing code to make it easier to drop in
a conformant mangling -- there's no functional change here.  I rename
the LAMBDA_EXPR_DISCIMINATOR to LAMBDA_EXPR_SCOPE_ONLY_DISCRIMINATOR,
foreshadowing that there'll be a new discriminator.  To provide ABI
warnings we'll need to calculate both, and that requires some
repacking of the lambda_expr's fields.  Finally, although we end up
calling the discriminator setter and the scope recorder (nearly)
always consecutively, it's clearer to handle it as two separate
operations.  That also allows us to remove the instantiation
special-case for a null extra-scope.

	gcc/cp/
	* cp-tree.h (LAMBDA_EXPR_DISCRIMINATOR): Rename to ...
	(LAMBDA_EXPR_SCOPE_ONLY_DISCRIMINATOR): ... here.
	(struct tree_lambda_expr): Make default_capture_mode &
	discriminator_scope bitfields.
	(record_null_lambda_scope) Delete.
	(record_lambda_scope_discriminator): Declare.
	* lambda.cc (struct lambda_discriminator): New struct.
	(lambda_scope, lambda_scope_stack): Adjust types.
	(lambda_count): Delete.
	(struct tree_int): Delete.
	(start_lambda_scope, finish_lambda_scope): Adjust.
	(record_lambda_scope): Only record the scope.
	(record_lambda_scope_discriminator): New.
	* mangle.cc (write_closure_type_name): Adjust.
	* module.cc (trees_out::core_vals): Likewise,
	(trees_in::core_vals): Likewise.
	* parser.cc (cp_parser_lambda_expression): Call
	record_lambda_scope_discriminator.
	* pt.cc (tsubst_lambda_expr): Adjust record_lambda_scope caling.  Call
	record_lambda_scope_discriminator. Commonize control flow on tsubsting
	the operator function.
	libcc1/
	* libcp1plugin.cc (plugin_start_closure): Adjust.
	gcc/testsuite/
	* g++.dg/abi/lambda-sig1-17.C: New.
	* g++.dg/abi/lambda-sig1.h: New.
	* g++.dg/cpp1y/lambda-mangle-1.C: Extracted to ...
	* g++.dg/cpp1y/lambda-mangle-1.h: ... here.
	* g++.dg/cpp1y/lambda-mangle-1-11.C: New
	* g++.dg/cpp1y/lambda-mangle-1-17.C
2022-11-01 06:04:48 -04:00
Jakub Jelinek
303976a607 c++: Implement C++23 P1169R4 - static operator() [PR106651]
The following patch attempts to implement C++23 P1169R4 - static operator()
paper's compiler side (there is some small library side too not implemented
yet).  This allows static members as user operator() declarations and
static specifier on lambdas without lambda capture.
The synthetized conversion operator changes for static lambdas as it can just
return the operator() static method address, doesn't need to create a thunk
for it.
The change in call.cc (joust) is to avoid ICEs because we assumed that len
could be different only if both candidates are direct calls but it can be
one direct and one indirect call, and to implement the
[over.match.best.general]/1 and [over.best.ics.general] changes from
the paper (implemented always as Jason is sure it doesn't make a difference
in C++20 and earlier unless static member function operator() or
static lambda which we accept with pedwarn in earlier standards too appears
and my testing confirmed that).

2022-09-27  Jakub Jelinek  <jakub@redhat.com>

	PR c++/106651
gcc/c-family/
	* c-cppbuiltin.cc (c_cpp_builtins): Predefine
	__cpp_static_call_operator=202207L for C++23.
gcc/cp/
	* cp-tree.h (LAMBDA_EXPR_STATIC_P): Implement C++23
	P1169R4 - static operator().  Define.
	* parser.cc (CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR): Document
	that it also allows static.
	(cp_parser_lambda_declarator_opt): Handle static lambda specifier.
	(cp_parser_decl_specifier_seq): Allow RID_STATIC for
	CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR.
	* decl.cc (grok_op_properties): If operator() isn't a method,
	use a different error wording, if it is static member function,
	allow it (for C++20 and older with a pedwarn unless it is
	a lambda function or template instantiation).
	* call.cc (joust): Don't ICE if one candidate is static member
	function and the other is an indirect call.  If the parameter
	conversion on the other candidate is user defined conversion,
	ellipsis or bad conversion, make static member function candidate
	a winner for that parameter.
	* lambda.cc (maybe_add_lambda_conv_op): Handle static lambdas.
	* error.cc (dump_lambda_function): Print static for static lambdas.
gcc/testsuite/
	* g++.dg/template/error30.C: Adjust expected diagnostics.
	* g++.dg/cpp1z/constexpr-lambda13.C: Likewise.
	* g++.dg/cpp23/feat-cxx2b.C: Test __cpp_static_call_operator.
	* g++.dg/cpp23/static-operator-call1.C: New test.
	* g++.dg/cpp23/static-operator-call2.C: New test.
	* g++.old-deja/g++.jason/operator.C: Adjust expected diagnostics.
2022-09-27 08:36:28 +02:00
Jason Merrill
7c989a8ed4 c++: lambda capture of array with deduced bounds [PR106567]
We can't use the type of an array variable directly if we haven't deduced
its length yet.

	PR c++/106567

gcc/cp/ChangeLog:

	* lambda.cc (type_deducible_expression_p): Check
	array_of_unknown_bound_p.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/lambda/lambda-array4.C: New test.
2022-09-12 12:59:46 -04:00
Patrick Palka
0c7bce0ac1 c++: constexpr init of union sub-aggr w/ base [PR105491]
Here ever since r10-7313-gb599bf9d6d1e18, reduced_constant_expression_p
in C++11/14 is rejecting the marked sub-aggregate initializer (of type S)

  W w = {.D.2445={.s={.D.2387={.m=0}, .b=0}}};
                     ^
ultimately because said initializer has CONSTRUCTOR_NO_CLEARING set,
hence the function must verify that all fields of S are initialized.
And before C++17 it doesn't expect to see base class fields (since
next_initializable_field skips over them), so the presence thereof
causes r_c_e_p to return false.

The reason r10-7313-gb599bf9d6d1e18 causes this is because in that
commit we began using CONSTRUCTOR_NO_CLEARING to precisely track whether
we're in middle of activating a union member.  This ends up affecting
clear_no_implicit_zero, which recurses into sub-aggregate initializers
only if the outer initializer has CONSTRUCTOR_NO_CLEARING set.  After
that commit, the outer union initializer above no longer has the flag
set at this point and so clear_no_implicit_zero no longer recurses into
the marked inner initializer.

But arguably r_c_e_p should be able to accept the marked initializer
regardless of whether CONSTRUCTOR_NO_CLEARING is set.  The primary bug
therefore seems to be that r_c_e_p relies on next_initializable_field
which skips over base class fields in C++11/14.  To fix this, this patch
introduces a new helper function next_subobject_field which is like
next_initializable_field except that it never skips base class fields,
and makes r_c_e_p use it.  This patch then renames next_initializable_field
to next_aggregate_field (and makes it skip over vptr fields again).

	PR c++/105491

gcc/cp/ChangeLog:

	* call.cc (field_in_pset): Adjust after next_initializable_field
	renaming.
	(build_aggr_conv): Likewise.
	(convert_like_internal): Likewise.
	(type_has_extended_temps): Likewise.
	* class.cc (default_init_uninitialized_part): Likewise.
	(finish_struct): Likewise.
	* constexpr.cc (cx_check_missing_mem_inits): Likewise.
	(reduced_constant_expression_p): Use next_subobject_field
	instead.
	* cp-gimplify.cc (get_source_location_impl_type): Adjust after
	next_initializable_field renaming.
	(fold_builtin_source_location): Likewise.
	* cp-tree.h (next_initializable_field): Rename to ...
	(next_aggregate_field): ... this.
	(next_subobject_field): Declare.
	* decl.cc (next_aggregate_field): Renamed from ...
	(next_initializable_field): ... this.  Skip over vptr fields
	again.
	(next_subobject_field): Define.
	(reshape_init_class): Adjust after next_initializable_field
	renaming.
	* init.cc (build_value_init_noctor): Likewise.
	(emit_mem_initializers): Likewise.
	* lambda.cc (build_capture_proxy): Likewise.
	* method.cc (build_comparison_op): Likewise.
	* pt.cc (maybe_aggr_guide): Likewise.
	* tree.cc (structural_type_p): Likewise.
	* typeck2.cc (split_nonconstant_init_1): Likewise.
	(digest_init_r): Likewise.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/constexpr-union7.C: New test.
	* g++.dg/cpp0x/constexpr-union7a.C: New test.
	* g++.dg/cpp2a/constinit17.C: New test.
2022-05-09 09:53:27 -04:00
Nathan Sidwell
addedd48e8 [c++][NFC] Rename Attached to Keyed
With modules, certain decls are 'scoped' with another decl.  I chose
the name 'attached', but that has become something specific in the
modules context, so is no longer a good name.  The alternative name I
considered was 'keyed', but we already had the concept of a key
virtual function (from the ABI), which is why I went with 'attached'.
However, I think 'keyed' is the less worse name.  I think there's less
chance of confusion.

	gcc/cp/
	* cp-tree.h (DECL_MODULE_KEYED_DECLS_P): Renamed from
	DECL_MODULE_ATTACHMENTS_P.
	(struct lane_decl_base): Rename module_attached_p to
	module_keyed_decls_p.
	(maybe_key_decl): Renamed from maybe_attach_decl.
	* lambda.cc (record_lambda_scope): Adjust.
	* lex.cc (cxx_dup_lang_specific_decl): Adjust.
	* module.cc (keyed_map_t, keyed_table): Renamed from attached_map_t,
	attached_table.
	(enum merge_kind): Rename MK_attached to MK_keyed.
	(trees_out::lang_decl_bools): Adjust.
	(trees_in::lang_decl_bools): Adjust.
	(trees_in::decl_value): Adjust.
	(trees_out::get_merge_kind): Adjust.
	(trees_out::key_mergeable): Adjust.
	(trees_in::key_mergeable): Adjust.
	(maybe_key_decl): Rename from maybe_attach_decl.
	(direct_import): Adjust.
	(fini_modules): Adjust.
2022-05-09 05:48:36 -07:00
Jakub Jelinek
1c8e9bed9b c++: Don't emit deprecated warnings or unavailable errors on lambda declarations
On the following testcase, we emit deprecated warnings or unavailable errors
even on merge declarations of those lambdas (the dg-bogus directives), while
IMHO we should emit them only when something actually calls those lambdas.

The following patch temporarily disables that diagnostics during
maybe_add_lambda_conv_op.

PR2173R1 also says that ambiguity between attribute-specifier-seq at the
end of requires-clause and attribute-specifier-seq from lambda-expression
should be resolved to attribute-specifier-seq for the latter.  Do we need
to do anything about that?  I mean, can a valid requires-clause end with
an attribute-specifier-seq?  Say operator int [[]] is valid primary
expression, but requires operator int [[]] isn't valid, nor is
requires operator int, no?

2022-05-04  Jakub Jelinek  <jakub@redhat.com>

	* lambda.cc: Include decl.h.
	(maybe_add_lambda_conv_op): Temporarily override deprecated_state to
	UNAVAILABLE_DEPRECATED_SUPPRESS.

	* g++.dg/cpp23/lambda-attr1.C: New test.
	* g++.dg/cpp23/lambda-attr2.C: New test.
2022-05-04 10:07:36 +02:00
Jason Merrill
53e7252140 c++: lambda capture dependent type [PR82980]
The stage 4 patch limited direct propagation of dependent type to capture
field/proxy to the "current instantiation", but many more types should be
suitable as well.

	PR c++/82980

gcc/cp/ChangeLog:

	* lambda.cc (type_deducible_expression_p): Allow more types.
2022-04-29 17:24:05 -04:00