[llvm-branch-commits] [cfe-branch] r81035 - in /cfe/branches/release_26: lib/CodeGen/CGRecordLayoutBuilder.cpp test/CodeGen/pragma-pack-3.c

Tanya Lattner tonic at nondot.org
Fri Sep 4 13:02:07 PDT 2009


Author: tbrethou
Date: Fri Sep  4 15:02:07 2009
New Revision: 81035

URL: http://llvm.org/viewvc/llvm-project?rev=81035&view=rev
Log:
Merge 80964 from mainline.
If the alignment of the chosen field in a union is greater than the alignment of the union, we need to use a packed LLVM struct. Fixes <rdar://problem/7184250>.

Added:
    cfe/branches/release_26/test/CodeGen/pragma-pack-3.c
      - copied unchanged from r80964, cfe/trunk/test/CodeGen/pragma-pack-3.c
Modified:
    cfe/branches/release_26/lib/CodeGen/CGRecordLayoutBuilder.cpp

Modified: cfe/branches/release_26/lib/CodeGen/CGRecordLayoutBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_26/lib/CodeGen/CGRecordLayoutBuilder.cpp?rev=81035&r1=81034&r2=81035&view=diff

==============================================================================
--- cfe/branches/release_26/lib/CodeGen/CGRecordLayoutBuilder.cpp (original)
+++ cfe/branches/release_26/lib/CodeGen/CGRecordLayoutBuilder.cpp Fri Sep  4 15:02:07 2009
@@ -200,8 +200,15 @@
   }
   
   // Now add our field.
-  if (Ty)
+  if (Ty) {
     AppendField(0, Ty);
+
+    if (getTypeAlignment(Ty) > Layout.getAlignment() / 8) {
+      // We need a packed struct.
+      Packed = true;
+      Align = 1;
+    }
+  }
   
   // Append tail padding.
   if (Layout.getSize() / 8 > Size)





More information about the llvm-branch-commits mailing list