mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-11-24 20:24:13 +08:00
0122faae30
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 |
||
---|---|---|
.. | ||
aclocal.m4 | ||
callbacks.cc | ||
callbacks.hh | ||
cc1plugin-config.h.in | ||
ChangeLog | ||
compiler-name.hh | ||
compiler.cc | ||
compiler.hh | ||
configure | ||
configure.ac | ||
connection.cc | ||
connection.hh | ||
context.cc | ||
context.hh | ||
deleter.hh | ||
findcomp.cc | ||
findcomp.hh | ||
gdbctx.hh | ||
libcc1.cc | ||
libcc1.sym | ||
libcc1plugin.cc | ||
libcc1plugin.sym | ||
libcp1.cc | ||
libcp1plugin.cc | ||
libcp1plugin.sym | ||
Makefile.am | ||
Makefile.in | ||
marshall-cp.hh | ||
marshall.cc | ||
marshall.hh | ||
names.cc | ||
names.hh | ||
rpc.hh | ||
status.hh |