gcc/libcc1
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
..
aclocal.m4
callbacks.cc
callbacks.hh
cc1plugin-config.h.in
ChangeLog Daily bump. 2022-10-13 00:17:37 +00:00
compiler-name.hh
compiler.cc
compiler.hh
configure regenerate configure files 2022-10-12 09:31:32 +02:00
configure.ac
connection.cc
connection.hh
context.cc
context.hh
deleter.hh
findcomp.cc
findcomp.hh
gdbctx.hh
libcc1.cc
libcc1.sym
libcc1plugin.cc c++: avoid <memory> poisoning on musl [PR106102] 2022-06-27 23:22:02 +01:00
libcc1plugin.sym
libcp1.cc
libcp1plugin.cc c++: per-scope, per-signature lambda discriminators 2022-11-01 17:44:36 -04:00
libcp1plugin.sym
Makefile.am
Makefile.in
marshall-cp.hh
marshall.cc
marshall.hh
names.cc
names.hh
rpc.hh
status.hh