Index: lib/Sema/SemaDeclAttr.cpp
===================================================================
--- lib/Sema/SemaDeclAttr.cpp	(revision 157942)
+++ lib/Sema/SemaDeclAttr.cpp	(working copy)
@@ -3795,6 +3795,13 @@
   case AttributeList::AT_naked:
   case AttributeList::AT_noinline:
     return true;
+  case AttributeList::AT_aligned: {
+    // Check to see whether the attribute has the proper spelling and form. 
+    // Note that we do not emit a diagnostic for unknown __declspecs
+    if (Attr.getName()->getName() == "align" && Attr.getNumArgs() == 1)
+      return true;
+    return false;
+  } 
   }
 }
 
Index: test/CodeGen/ms-declspecs.c
===================================================================
--- test/CodeGen/ms-declspecs.c	(revision 157942)
+++ test/CodeGen/ms-declspecs.c	(working copy)
@@ -1,5 +1,13 @@
 // RUN: %clang_cc1 -triple i386-pc-win32 %s -emit-llvm -fms-compatibility -o - | FileCheck %s
 
+struct __declspec(align(16)) S {
+  char x;
+};
+union { struct S s; } u;
+
+// CHECK: @u = {{.*}}zeroinitializer, align 16
+
+
 // CHECK: define void @t3() nounwind noinline naked {
 __declspec(naked) void t3() {}
 
