PR c++/84181 - ICE with lambda parm in template argument.
authorJason Merrill <jason@redhat.com>
Fri, 2 Feb 2018 16:42:46 +0000 (11:42 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 2 Feb 2018 16:42:46 +0000 (11:42 -0500)
* tree.c (strip_typedefs_expr): Use cp_tree_operand_length.

From-SVN: r257339

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/g++.dg/cpp1y/lambda-generic-targ1.C [new file with mode: 0644]

index 728597599c5a3d30a6754ff80a901c4a39606307..9c76f8e528e6d46a59ffd4e328bd88819f7850bd 100644 (file)
@@ -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.
index e87c59659a5d5e0101dcc8e37a0343d247040629..c212c80ecf8e8e27a09f92c223efa00b066d4d64 100644 (file)
@@ -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 (file)
index 0000000..fa85249
--- /dev/null
@@ -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 >();
+}