[gcc r14-11823] c++: lambda this capture and requires [PR120123]
Jason Merrill
jason@gcc.gnu.org
Mon Jun 2 15:53:55 GMT 2025
https://gcc.gnu.org/g:6e10db3be0193514d8a67d1367d8fbe639e03b6a
commit r14-11823-g6e10db3be0193514d8a67d1367d8fbe639e03b6a
Author: Jason Merrill <jason@redhat.com>
Date: Fri May 30 18:27:45 2025 -0400
c++: lambda this capture and requires [PR120123]
We shouldn't need to be within the lambda body to look through it to the
enclosing non-static member function.
This change is a small subset of r16-970.
PR c++/120123
gcc/cp/ChangeLog:
* lambda.cc (nonlambda_method_basetype): Look through lambdas
even when current_class_ref is null.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/concepts-lambda24.C: New test.
Diff:
---
gcc/cp/lambda.cc | 5 +----
gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C | 13 +++++++++++++
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc
index 5c97f0f6fd33..dfaf79692cd1 100644
--- a/gcc/cp/lambda.cc
+++ b/gcc/cp/lambda.cc
@@ -1002,12 +1002,9 @@ current_nonlambda_function (void)
tree
nonlambda_method_basetype (void)
{
- if (!current_class_ref)
- return NULL_TREE;
-
tree type = current_class_type;
if (!type || !LAMBDA_TYPE_P (type))
- return type;
+ return current_class_ref ? type : NULL_TREE;
while (true)
{
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C
new file mode 100644
index 000000000000..28f56ca2335e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C
@@ -0,0 +1,13 @@
+// PR c++/120123
+// { dg-do compile { target c++20 } }
+
+struct H {
+ void member(int) {}
+ void call() {
+ [this]() {
+ [this](const auto& v)
+ requires requires { /*this->*/member(v); }
+ { return member(v); }(0);
+ };
+ }
+};
More information about the Gcc-cvs
mailing list