When an externally-supplied record layout has a size that clearly
doesn't include padding up to the alignment of the record, take this
as a cue that the alignment of the record should (conservatively) be
set to 1. This is similar to other the other cues we use to determine
that the record has a lower alignment, e.g., that the
externally-supplied layout places fields at lower offsets than we
would. Fixes <rdar://problem/12582052>; test case in LLDB.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166824 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CodeGenCXX/override-layout.cpp b/test/CodeGenCXX/override-layout.cpp
index d432885..aba4c91 100644
--- a/test/CodeGenCXX/override-layout.cpp
+++ b/test/CodeGenCXX/override-layout.cpp
@@ -1,7 +1,7 @@
 // RUN: %clang_cc1 -fdump-record-layouts-simple %s 2> %t.layouts
 // RUN: %clang_cc1 -fdump-record-layouts-simple %s > %t.before 2>&1
 // RUN: %clang_cc1 -DPACKED= -DALIGNED16= -fdump-record-layouts-simple -foverride-record-layout=%t.layouts %s > %t.after 2>&1
-// RUN: diff %t.before %t.after
+// RUN: diff -u %t.before %t.after
 // RUN: FileCheck %s < %t.after
 
 // If not explicitly disabled, set PACKED to the packed attribute.
@@ -54,11 +54,24 @@
   X4();
 };
 
+// CHECK: Type: struct X5
+struct PACKED X5 {
+  union {
+    long a;
+    long b;
+  };
+  short l;
+  short r;
+};
+
 void use_structs() {
   X0 x0s[sizeof(X0)];
   X1 x1s[sizeof(X1)];
   X2 x2s[sizeof(X2)];
   X3 x3s[sizeof(X3)];
   X4 x4s[sizeof(X4)];
+  X5 x5s[sizeof(X5)];
   x4s[1].a = 1;
+  x5s[1].a = 17;
 }
+