diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-04-22 03:17:04 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-04-22 03:17:04 +0000 |
commit | 89da874f8ecfebabdac2c6e9b7930ebe179ccf81 (patch) | |
tree | 4423c4aed572a8e4d10e8a4662a8d8abaaddb8e5 /lib/CodeGen/CGRecordLayoutBuilder.cpp | |
parent | e1467a4ceeeb74cdc54830e03df8d58893e38892 (diff) |
IRgen: Set alignment correctly on bit-field accesses.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102046 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGRecordLayoutBuilder.cpp')
-rw-r--r-- | lib/CodeGen/CGRecordLayoutBuilder.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/CodeGen/CGRecordLayoutBuilder.cpp b/lib/CodeGen/CGRecordLayoutBuilder.cpp index 530a41c3d6..17c5640c64 100644 --- a/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/lib/CodeGen/CGRecordLayoutBuilder.cpp @@ -152,8 +152,9 @@ static CGBitFieldInfo ComputeBitFieldInfo(CodeGenTypes &Types, uint64_t FieldOffset, uint64_t FieldSize) { const RecordDecl *RD = FD->getParent(); - uint64_t ContainingTypeSizeInBits = - Types.getContext().getASTRecordLayout(RD).getSize(); + const ASTRecordLayout &RL = Types.getContext().getASTRecordLayout(RD); + uint64_t ContainingTypeSizeInBits = RL.getSize(); + unsigned ContainingTypeAlign = RL.getAlignment(); const llvm::Type *Ty = Types.ConvertTypeForMemRecursive(FD->getType()); uint64_t TypeSizeInBytes = Types.getTargetData().getTypeAllocSize(Ty); @@ -223,8 +224,7 @@ static CGBitFieldInfo ComputeBitFieldInfo(CodeGenTypes &Types, AI.FieldByteOffset = AccessStart / 8; AI.FieldBitStart = AccessBitsInFieldStart - AccessStart; AI.AccessWidth = AccessWidth; - // FIXME: This might be wrong! - AI.AccessAlignment = 0; + AI.AccessAlignment = llvm::MinAlign(ContainingTypeAlign, AccessStart) / 8; AI.TargetBitOffset = AccessedTargetBits; AI.TargetBitWidth = AccessBitsInFieldSize; |