From 521fb45ca6486a064e73612ad98b99cba615840c Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sat, 11 Aug 2018 07:02:22 -0400 Subject: [PATCH] PR c++/86728 - C variadic generic lambda. * parser.c (cp_parser_parameter_declaration): Don't turn 'auto' into a pack if it's followed by a declarator-id. From-SVN: r263486 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/parser.c | 3 ++- gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic19.C | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic19.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4cc49d77cff5..af9feea0bc61 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-08-10 Jason Merrill + + PR c++/86728 - C variadic generic lambda. + * parser.c (cp_parser_parameter_declaration): Don't turn 'auto' into + a pack if it's followed by a declarator-id. + 2018-07-03 Jason Merrill PR c++/86378 - functional cast in noexcept-specifier. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 24ecf17b3b46..c2fa60b4aadb 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -21343,7 +21343,8 @@ cp_parser_parameter_declaration (cp_parser *parser, parameter was introduced during cp_parser_parameter_declaration, change any implicit parameters introduced into packs. */ if (parser->implicit_template_parms - && (token->type == CPP_ELLIPSIS + && ((token->type == CPP_ELLIPSIS + && declarator_can_be_parameter_pack (declarator)) || (declarator && declarator->parameter_pack_p))) { int latest_template_parm_idx = TREE_VEC_LENGTH diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic19.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic19.C new file mode 100644 index 000000000000..e78677de0b52 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic19.C @@ -0,0 +1,4 @@ +// PR c++/86728 +// { dg-do compile { target c++14 } } + +auto c = [](auto x ...) { }; -- 2.47.2