[v3,0/6] c++: Add some missing LAMBDA_EXPR_EXTRA_SCOPEs

Message ID 677bca93.050a0220.33acbc.5415@mx.google.com
Headers
Series c++: Add some missing LAMBDA_EXPR_EXTRA_SCOPEs |

Message

Nathaniel Shead Jan. 6, 2025, 12:20 p.m. UTC
  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