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 {}; +}
