diff options
author | Jason Merrill <jason@redhat.com> | 2018-06-18 20:38:32 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-06-18 20:38:32 -0400 |
commit | 44e3e545a30ef6425cb7fbfb48fbc01056233ae0 (patch) | |
tree | 6c135e275d810b25c97ad40ab26252be98e361ad /gcc | |
parent | cae39eb41f37b8714f5684ee58b74460f2b76cd2 (diff) | |
download | gcc-44e3e545a30ef6425cb7fbfb48fbc01056233ae0.zip gcc-44e3e545a30ef6425cb7fbfb48fbc01056233ae0.tar.gz gcc-44e3e545a30ef6425cb7fbfb48fbc01056233ae0.tar.bz2 |
PR c++/86200 - ICE with unexpanded pack in lambda parameter.
* pt.c (find_parameter_packs_r) [LAMBDA_EXPR]: Also look into the
function type.
From-SVN: r261726
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/pt.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic7.C | 14 |
3 files changed, 21 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a8d0e62..a671476 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2018-06-18 Jason Merrill <jason@redhat.com> + PR c++/86200 - ICE with unexpanded pack in lambda parameter. + * pt.c (find_parameter_packs_r) [LAMBDA_EXPR]: Also look into the + function type. + PR c++/81060 - ICE with unexpanded parameter pack. * pt.c (check_for_bare_parameter_packs): Add loc parameter. * decl.c (grokdeclarator): Call it for qualifying_scope. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 5af0f9a..b783b5e 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -3839,8 +3839,10 @@ find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data) cap; cap = TREE_CHAIN (cap)) cp_walk_tree (&TREE_VALUE (cap), &find_parameter_packs_r, ppd, ppd->visited); - /* Since we defer implicit capture, look in the body as well. */ + /* Since we defer implicit capture, look in the parms and body. */ tree fn = lambda_function (t); + cp_walk_tree (&TREE_TYPE (fn), &find_parameter_packs_r, ppd, + ppd->visited); cp_walk_tree (&DECL_SAVED_TREE (fn), &find_parameter_packs_r, ppd, ppd->visited); *walk_subtrees = 0; diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic7.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic7.C new file mode 100644 index 0000000..c5355b0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic7.C @@ -0,0 +1,14 @@ +// PR c++/86200 +// { dg-do compile { target c++11 } } + +template<typename ... Args> +static void foo() +{ + [](Args, int x) { + x; + }; // { dg-error "packs not expanded" } +} +int main() +{ + foo(); +} |