diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f3d086b5ea64c4418be31338e4c52570e7720ffd..b3e4028f6e5b700a3b18e769aa96c4e9c199ffbd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-07  Andrew Pinski  <pinskia@physics.uc.edu>
+
+	PR middle-end/28862
+	* stor-layout.c (relayout_decl): Don't zero the alignment if it
+	was set by the user.
+
 2006-09-07  Paolo Bonzini  <bonzini@gnu.org>
 
 	PR target/27117
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index 415f7c1168e2dbfd26f8cee33608cec6eb0a3b7b..d1e18a243d04bb332182c0ad5281f14cecc7420e 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -489,7 +489,8 @@ relayout_decl (tree decl)
 {
   DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
   DECL_MODE (decl) = VOIDmode;
-  DECL_ALIGN (decl) = 0;
+  if (!DECL_USER_ALIGN (decl))
+    DECL_ALIGN (decl) = 0;
   SET_DECL_RTL (decl, 0);
 
   layout_decl (decl, 0);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0e052be2e7df38e715118408af7be24a17a46c75..d8a56319e8b938f38608c61cd8395b75a44fab83 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-07  Andrew Pinski  <pinskia@physics.uc.edu>
+
+	PR middle-end/28862
+	* gcc.c-torture/compile/vector-align-1.c: New test.
+
 2006-09-06  Andrew Pinski  <pinskia@physics.uc.edu>
 
 	PR rtl-opt/27883
diff --git a/gcc/testsuite/gcc.c-torture/compile/vector-align-1.c b/gcc/testsuite/gcc.c-torture/compile/vector-align-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..dc97ba6ca24166885a7f806f01a317e4af9abac8
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/vector-align-1.c
@@ -0,0 +1,11 @@
+/* Check to make sure the alignment on vectors is not being lost. */
+
+/* If some target has a Max alignment less than 128, please create
+   a #ifdef around the alignment and add your alignment.  */
+#define alignment 128
+
+char x __attribute__((aligned(alignment),vector_size(2)));
+
+
+int f[__alignof__(x) == alignment?1:-1];
+