aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2018-02-02 11:42:46 -0500
committerJason Merrill <jason@gcc.gnu.org>2018-02-02 11:42:46 -0500
commitb7d8e7e5d37109021f1fcc69cd7780656b85b51a (patch)
treecbc3ddbbcdef5473f78bf18a993f9d786f748400 /gcc
parent113db472405f2fb2ea9c0c795d162aa0e2b93728 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/tree.c2
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/lambda-generic-targ1.C16
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 >();
+}