Blame SOURCES/gcc34-rh178062.patch

6fdc0f
2006-02-25  Alexandre Oliva  <aoliva@redhat.com>
6fdc0f
6fdc0f
	* varasm.c (copy_constant): Handle VECTOR_CST.
6fdc0f
6fdc0f
	* gcc.dg/altivec-23.c: New test.
6fdc0f
6fdc0f
--- gcc/varasm.c	2006-02-25 03:52:54.000000000 -0300
6fdc0f
+++ gcc/varasm.c	2006-02-25 03:54:56.000000000 -0300
6fdc0f
@@ -2464,6 +2464,19 @@ copy_constant (tree exp)
6fdc0f
 	return copy;
6fdc0f
       }
6fdc0f
 
6fdc0f
+    case VECTOR_CST:
6fdc0f
+      {
6fdc0f
+	tree copy = copy_node (exp);
6fdc0f
+	tree list = copy_list (TREE_VECTOR_CST_ELTS (exp));
6fdc0f
+	tree tail;
6fdc0f
+
6fdc0f
+	TREE_VECTOR_CST_ELTS (copy) = list;
6fdc0f
+	for (tail = list; tail; tail = TREE_CHAIN (tail))
6fdc0f
+	  TREE_VALUE (tail) = copy_constant (TREE_VALUE (tail));
6fdc0f
+
6fdc0f
+	return copy;
6fdc0f
+      }
6fdc0f
+
6fdc0f
     default:
6fdc0f
       {
6fdc0f
 	tree t;
6fdc0f
--- gcc/testsuite/gcc.dg/altivec-23.c	1970-01-01 00:00:00.000000000 +0000
6fdc0f
+++ gcc/testsuite/gcc.dg/altivec-23.c	2006-02-25 04:10:36.000000000 -0300
6fdc0f
@@ -0,0 +1,25 @@
6fdc0f
+/* Verify that it is possible to define variables of composite types
6fdc0f
+   containing vector types.  We used to crash handling the
6fdc0f
+   initializer of automatic ones.  */
6fdc0f
+
6fdc0f
+/* { dg-do compile { target powerpc*-*-* } } */
6fdc0f
+/* { dg-xfail-if "" { "powerpc-ibm-aix*" } { "-maltivec" } { "" } } */
6fdc0f
+/* { dg-options "-maltivec -mabi=altivec" } */
6fdc0f
+
6fdc0f
+#include <altivec.h>
6fdc0f
+
6fdc0f
+typedef int bt;
6fdc0f
+typedef vector bt vt;
6fdc0f
+typedef struct { vt x; bt y[sizeof(vt) / sizeof (bt)]; } st;
6fdc0f
+#define INIT { 1, 2, 3, 4 }
6fdc0f
+
6fdc0f
+void f ()
6fdc0f
+{
6fdc0f
+  vt x = INIT;
6fdc0f
+  vt y[1] = { INIT };
6fdc0f
+  st s = { INIT, INIT };
6fdc0f
+}
6fdc0f
+
6fdc0f
+vt x = INIT;
6fdc0f
+vt y[1] = { INIT };
6fdc0f
+st s = { INIT, INIT };