https://gcc.gnu.org/g:fa71e855ab78945af9da923408bac396213e2475

commit r16-4002-gfa71e855ab78945af9da923408bac396213e2475
Author: Eczbek <[email protected]>
Date:   Sat Sep 20 09:25:40 2025 -0400

    c++: Fix lambdas with variadic parameters and static specifier [PR119048]
    
            PR c++/119048
    
    gcc/cp/ChangeLog:
    
            * lambda.cc (compare_lambda_sig): Only skip first parameter for
            object members.
    
    gcc/testsuite/ChangeLog:
    
            * g++.dg/cpp23/static-operator-call8.C: New test.
    
    Reviewed-by: Jason Merrill <[email protected]>

Diff:
---
 gcc/cp/lambda.cc                                   | 4 ++--
 gcc/testsuite/g++.dg/cpp23/static-operator-call8.C | 6 ++++++
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc
index 711e3b7a18e4..bb0aa7d0a020 100644
--- a/gcc/cp/lambda.cc
+++ b/gcc/cp/lambda.cc
@@ -1742,8 +1742,8 @@ compare_lambda_sig (tree fn_a, tree fn_b)
       || fn_b == error_mark_node)
     return false;
 
-  for (tree args_a = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn_a))),
-        args_b = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn_b)));
+  for (tree args_a = FUNCTION_FIRST_USER_PARMTYPE (fn_a),
+        args_b = FUNCTION_FIRST_USER_PARMTYPE (fn_b);
        args_a || args_b;
        args_a = TREE_CHAIN (args_a), args_b = TREE_CHAIN (args_b))
     {
diff --git a/gcc/testsuite/g++.dg/cpp23/static-operator-call8.C 
b/gcc/testsuite/g++.dg/cpp23/static-operator-call8.C
new file mode 100644
index 000000000000..46aa6b42ce86
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp23/static-operator-call8.C
@@ -0,0 +1,6 @@
+// PR c++/119048
+// { dg-do compile { target c++23 } }
+
+int main() {
+       [] {}, [](...) static {};
+}

Reply via email to