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

Reply via email to