[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