simd-6.c: New.
authorAldy Hernandez <aldyh@redhat.com>
Mon, 5 May 2003 20:31:45 +0000 (20:31 +0000)
committerAldy Hernandez <aldyh@gcc.gnu.org>
Mon, 5 May 2003 20:31:45 +0000 (20:31 +0000)
2003-05-05  Aldy Hernandez  <aldyh@redhat.com>

        * testsuite/gcc.c-torture/compile/simd-6.c: New.

        * c-typeck.c (digest_init): Handle arrays of vector constants.

From-SVN: r66501

gcc/ChangeLog
gcc/c-typeck.c
gcc/testsuite/gcc.c-torture/compile/simd-6.c [new file with mode: 0644]

index 573ec59e6e78961bcb16c6be7583e146c57eeb5e..3cf8d08105c8972620d7415935c2210f0d52e9af 100644 (file)
@@ -1,3 +1,9 @@
+2003-05-05  Aldy Hernandez  <aldyh@redhat.com>
+
+        * testsuite/gcc.c-torture/compile/simd-6.c: New.
+
+        * c-typeck.c (digest_init): Handle arrays of vector constants.
+
 2003-05-05  Jakub Jelinek  <jakub@redhat.com>
 
        * builtins.c (expand_builtin_mempcpy): New function.
index 23b7d2da970eb8e1f3cf0b3d38edf49f6b9d5bdf..c4e482ee240b990d186387753e54890b2be59309 100644 (file)
@@ -4787,10 +4787,17 @@ digest_init (type, init, require_constant)
   /* Build a VECTOR_CST from a *constant* vector constructor.  If the
      vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
      below and handle as a constructor.  */
-  if (code == VECTOR_TYPE
-      && comptypes (TREE_TYPE (inside_init), type)
-      && TREE_CONSTANT (inside_init))
-    return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
+    if (code == VECTOR_TYPE
+        && comptypes (TREE_TYPE (inside_init), type)
+        && TREE_CONSTANT (inside_init))
+      {
+       if (TREE_CODE (inside_init) == VECTOR_CST
+           && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
+                         TYPE_MAIN_VARIANT (type)))
+         return inside_init;
+       else
+         return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
+      }
 
   /* Any type can be initialized
      from an expression of the same type, optionally with braces.  */
diff --git a/gcc/testsuite/gcc.c-torture/compile/simd-6.c b/gcc/testsuite/gcc.c-torture/compile/simd-6.c
new file mode 100644 (file)
index 0000000..9106a73
--- /dev/null
@@ -0,0 +1,3 @@
+typedef int __attribute__((mode(V2SI))) vec;
+
+vec a[] = {(vec) {1, 2}, {3, 4}};