]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++/103326 - fix ICE in tsubst with VECTOR_CST
authorRichard Biener <rguenther@suse.de>
Fri, 19 Nov 2021 07:54:18 +0000 (08:54 +0100)
committerRichard Biener <rguenther@suse.de>
Fri, 19 Nov 2021 09:35:54 +0000 (10:35 +0100)
This adds missing handling of VECTOR_CST.

2021-11-19  Richard Biener  <rguenther@suse.de>

PR c++/103326
* pt.c (tsubst_copy): Handle VECTOR_CST.

* g++.dg/pr103326.C: New testcase.

gcc/cp/pt.c
gcc/testsuite/g++.dg/pr103326.C [new file with mode: 0644]

index 6a2a937764842d72ef3b2e14d682b447f688e885..22798b91608e46b706ee553a1013afe53d223362 100644 (file)
@@ -17254,6 +17254,7 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
     case INTEGER_CST:
     case REAL_CST:
     case COMPLEX_CST:
+    case VECTOR_CST:
       {
        /* Instantiate any typedefs in the type.  */
        tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
diff --git a/gcc/testsuite/g++.dg/pr103326.C b/gcc/testsuite/g++.dg/pr103326.C
new file mode 100644 (file)
index 0000000..260e7da
--- /dev/null
@@ -0,0 +1,15 @@
+// { dg-do compile }
+// { dg-require-effective-target c++11 }
+
+using x86_64_v16qi [[gnu::__vector_size__ (16)]] = char;
+
+template<typename T>
+void foo()
+{
+  constexpr x86_64_v16qi zero{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+}
+
+void foo2()
+{
+  foo<int>();
+}