diff options
author | Jason Merrill <jason@redhat.com> | 2018-02-02 11:42:46 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-02-02 11:42:46 -0500 |
commit | b7d8e7e5d37109021f1fcc69cd7780656b85b51a (patch) | |
tree | cbc3ddbbcdef5473f78bf18a993f9d786f748400 /gcc | |
parent | 113db472405f2fb2ea9c0c795d162aa0e2b93728 (diff) | |
download | gcc-b7d8e7e5d37109021f1fcc69cd7780656b85b51a.zip gcc-b7d8e7e5d37109021f1fcc69cd7780656b85b51a.tar.gz gcc-b7d8e7e5d37109021f1fcc69cd7780656b85b51a.tar.bz2 |
PR c++/84181 - ICE with lambda parm in template argument.
* tree.c (strip_typedefs_expr): Use cp_tree_operand_length.
From-SVN: r257339
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/tree.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/lambda-generic-targ1.C | 16 |
3 files changed, 22 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7285975..9c76f8e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2018-02-02 Jason Merrill <jason@redhat.com> + + PR c++/84181 - ICE with lambda parm in template argument. + * tree.c (strip_typedefs_expr): Use cp_tree_operand_length. + 2018-02-01 Jason Merrill <jason@redhat.com> PR c++/84160 - ICE with nested variadic capture. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index e87c596..c212c80 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1773,7 +1773,7 @@ strip_typedefs_expr (tree t, bool *remove_attributes) gcc_assert (EXPR_P (t)); - n = TREE_OPERAND_LENGTH (t); + n = cp_tree_operand_length (t); ops = XALLOCAVEC (tree, n); type = TREE_TYPE (t); diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-targ1.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-targ1.C new file mode 100644 index 0000000..fa85249 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-targ1.C @@ -0,0 +1,16 @@ +// PR c++/84181 +// { dg-do compile { target c++14 } } + +template < int ... I > +struct A{}; + +template < typename T > +void f(){ + [](auto ... i){ + return A< decltype(i){} ... >{}; + }; +} + +int main(){ + f< int >(); +} |