This patch series fixes some ABI issues in lambdas, with a side effect of fixing some issues with module streaming. This doesn't completely fix the ABI for lambdas (in particular, namespace scope aliases are still broken) but it at least improves the situation.
Successfully bootstrapped and regtested on x86_64-pc-linux-gnu. Nathaniel Shead (6): c++: Fix mangling of lambdas in static data member initializers [PR107741] c++: Fix mangling of otherwise unattached class-scope lambdas [PR118245] c++: Fix ABI for lambdas declared in alias templates [PR116568] c++: Update mangling of lambdas in expressions c++/modules: Add testcase for fixed ICE [PR116568] c++/modules: Diagnose TU-local lambdas, give mangling scope to lambdas in concepts gcc/c-family/c-opts.cc | 2 +- gcc/common.opt | 5 +- gcc/cp/cp-tree.h | 9 +- gcc/cp/decl2.cc | 77 ++++++++++++ gcc/cp/lambda.cc | 33 +++++- gcc/cp/mangle.cc | 15 ++- gcc/cp/module.cc | 7 +- gcc/cp/parser.cc | 111 ++++++++++++------ gcc/cp/pt.cc | 50 +++++--- gcc/doc/invoke.texi | 3 + gcc/testsuite/g++.dg/abi/lambda-ctx2-19.C | 10 ++ gcc/testsuite/g++.dg/abi/lambda-ctx2-19vs20.C | 8 ++ gcc/testsuite/g++.dg/abi/lambda-ctx2-20.C | 10 ++ gcc/testsuite/g++.dg/abi/lambda-ctx2.h | 27 +++++ gcc/testsuite/g++.dg/abi/lambda-ctx3.C | 21 ++++ gcc/testsuite/g++.dg/abi/lambda-ctx4.C | 29 +++++ gcc/testsuite/g++.dg/abi/macro0.C | 2 +- gcc/testsuite/g++.dg/abi/mangle74.C | 4 +- .../g++.dg/cpp0x/static-member-init-1.C | 5 + .../g++.dg/cpp2a/lambda-generic-mangle1.C | 2 +- .../g++.dg/cpp2a/lambda-generic-mangle1a.C | 2 +- gcc/testsuite/g++.dg/cpp2a/lambda-uneval20.C | 7 ++ gcc/testsuite/g++.dg/modules/internal-4_b.C | 6 +- gcc/testsuite/g++.dg/modules/lambda-8.h | 7 ++ gcc/testsuite/g++.dg/modules/lambda-8_a.H | 5 + gcc/testsuite/g++.dg/modules/lambda-8_b.C | 5 + gcc/testsuite/g++.dg/modules/lambda-9.h | 2 + gcc/testsuite/g++.dg/modules/lambda-9_a.H | 4 + gcc/testsuite/g++.dg/modules/lambda-9_b.C | 6 + gcc/testsuite/g++.dg/modules/late-ret-3_a.H | 2 +- gcc/testsuite/g++.dg/other/fold1.C | 2 +- 31 files changed, 402 insertions(+), 76 deletions(-) create mode 100644 gcc/testsuite/g++.dg/abi/lambda-ctx2-19.C create mode 100644 gcc/testsuite/g++.dg/abi/lambda-ctx2-19vs20.C create mode 100644 gcc/testsuite/g++.dg/abi/lambda-ctx2-20.C create mode 100644 gcc/testsuite/g++.dg/abi/lambda-ctx2.h create mode 100644 gcc/testsuite/g++.dg/abi/lambda-ctx3.C create mode 100644 gcc/testsuite/g++.dg/abi/lambda-ctx4.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/static-member-init-1.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/lambda-uneval20.C create mode 100644 gcc/testsuite/g++.dg/modules/lambda-8.h create mode 100644 gcc/testsuite/g++.dg/modules/lambda-8_a.H create mode 100644 gcc/testsuite/g++.dg/modules/lambda-8_b.C create mode 100644 gcc/testsuite/g++.dg/modules/lambda-9.h create mode 100644 gcc/testsuite/g++.dg/modules/lambda-9_a.H create mode 100644 gcc/testsuite/g++.dg/modules/lambda-9_b.C -- 2.47.0