summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/RecordLayoutBuilder.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2011-05-10 19:00:50 +0000
committerFariborz Jahanian <fjahanian@apple.com>2011-05-10 19:00:50 +0000
commit07ceb0a1a4816be1b93377dcae4a5c38d1d924fd (patch)
treee647fcf87cc092868ff4a2526a1d63fd27c8084f /clang/lib/AST/RecordLayoutBuilder.cpp
parent6878c36328e14455c208783688667626b13955f8 (diff)
downloadbcm5719-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.cpp7
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,
OpenPOWER on IntegriCloud