Gcc pads the size of an array using the alignment of its elements.

The size of the array may not be aligned according to alignment of its elements if an alignment attribute is
specified in a typedef. Fixes rdar://8665729 & http://llvm.org/PR5637.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130242 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Sema/align-x86.c b/test/Sema/align-x86.c
index 0c84384..61bd1d3 100644
--- a/test/Sema/align-x86.c
+++ b/test/Sema/align-x86.c
@@ -18,3 +18,27 @@
 short chk1[__alignof__(g4) == 1 ? 1 : -1];
 short chk2[__alignof__(g4.a) == 1 ? 1 : -1];
 
+
+// PR5637
+
+#define ALIGNED(x) __attribute__((aligned(x)))
+
+typedef ALIGNED(2) struct {
+  char a[3];
+} T;
+
+short chk1[sizeof(T)       == 3 ? 1 : -1];
+short chk2[sizeof(T[1])    == 4 ? 1 : -1];
+short chk3[sizeof(T[2])    == 6 ? 1 : -1];
+short chk4[sizeof(T[2][1]) == 8 ? 1 : -1];
+short chk5[sizeof(T[1][2]) == 6 ? 1 : -1];
+
+typedef struct ALIGNED(2) {
+  char a[3];
+} T2;
+
+short chk1[sizeof(T2)       == 4 ? 1 : -1];
+short chk2[sizeof(T2[1])    == 4 ? 1 : -1];
+short chk3[sizeof(T2[2])    == 8 ? 1 : -1];
+short chk4[sizeof(T2[2][1]) == 8 ? 1 : -1];
+short chk5[sizeof(T2[1][2]) == 8 ? 1 : -1];