diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2011-05-10 19:00:50 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-05-10 19:00:50 +0000 |
commit | 07ceb0a1a4816be1b93377dcae4a5c38d1d924fd (patch) | |
tree | e647fcf87cc092868ff4a2526a1d63fd27c8084f /clang/lib/AST/RecordLayoutBuilder.cpp | |
parent | 6878c36328e14455c208783688667626b13955f8 (diff) | |
download | bcm5719-llvm-07ceb0a1a4816be1b93377dcae4a5c38d1d924fd.tar.gz bcm5719-llvm-07ceb0a1a4816be1b93377dcae4a5c38d1d924fd.zip |
Support pack pragma and ms_struct attributes. // rdar://8823265
llvm-svn: 131142
Diffstat (limited to 'clang/lib/AST/RecordLayoutBuilder.cpp')
-rw-r--r-- | clang/lib/AST/RecordLayoutBuilder.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index 794ae6fdc59..5a119847867 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -1299,6 +1299,13 @@ void RecordLayoutBuilder::LayoutFields(const RecordDecl *D) { uint64_t UnpaddedFieldOffset = getDataSizeInBits() - UnfilledBitsInLastByte; FieldAlign = std::max(FieldAlign, FieldAlignLastFD); + // The maximum field alignment overrides the aligned attribute. + if (!MaxFieldAlignment.isZero()) { + unsigned MaxFieldAlignmentInBits = + Context.toBits(MaxFieldAlignment); + FieldAlign = std::min(FieldAlign, MaxFieldAlignmentInBits); + } + uint64_t NewSizeInBits = llvm::RoundUpToAlignment(UnpaddedFieldOffset, FieldAlign); setDataSize(llvm::RoundUpToAlignment(NewSizeInBits, |