c++: Lambda context mangling
authorNathan Sidwell <nathan@acm.org>
Mon, 10 Oct 2022 21:55:04 +0000 (17:55 -0400)
committerNathan Sidwell <nathan@acm.org>
Mon, 10 Oct 2022 22:13:47 +0000 (18:13 -0400)
commitc7cb239f51788dbe3148368942b208934707b6a7
tree5623c918585a6fb4aa69910b91dc982d2100933d
parent29b0fe393859729215b0db5d28f2faea30c6ec32
c++: Lambda context mangling

VAR and FIELD decls can become part of a lambda context, when the
lambda is 'attached' to that entity (It's a C++20 ODR thing that was
discovered with modules, but is actually separate.)  We were not
marking those decls as substitution candidates, leading to demangling
failures and variance from other compilers.

This patch bumps the ABI, and adds the contexts them to the
substitution table.  This is the intent of the ABI.

gcc/
* common.opt (-fabi-version=): Document 18.
* doc/invoke.texi (-fabi-version): Document 18.
gcc/c-family/
* c-opts.cc (c_common_post_options): Bump abi to 18.
gcc/cp/
* mangle.cc (write_prefix): Add VAR_DECL & FIELD_DECL to
substitution table under abi=18.  Note possible mismatch.
gcc/testsuite/
* g++.dg/abi/lambda-ctx1-17.C: New.
* g++.dg/abi/lambda-ctx1-18.C: New.
* g++.dg/abi/lambda-ctx1-18vs17.C: New.
* g++.dg/abi/lambda-ctx1.h: New.
* g++.dg/abi/lambda-vis.C: Adjust expected mangles.
* g++.dg/abi/macro0.C: Adjust.
gcc/c-family/c-opts.cc
gcc/common.opt
gcc/cp/mangle.cc
gcc/doc/invoke.texi
gcc/testsuite/g++.dg/abi/lambda-ctx1-17.C [new file with mode: 0644]
gcc/testsuite/g++.dg/abi/lambda-ctx1-18.C [new file with mode: 0644]
gcc/testsuite/g++.dg/abi/lambda-ctx1-18vs17.C [new file with mode: 0644]
gcc/testsuite/g++.dg/abi/lambda-ctx1.h [new file with mode: 0644]
gcc/testsuite/g++.dg/abi/lambda-vis.C
gcc/testsuite/g++.dg/abi/macro0.C