diff options
Diffstat (limited to 'lib/CodeGen/CGClass.cpp')
-rw-r--r-- | lib/CodeGen/CGClass.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/CodeGen/CGClass.cpp b/lib/CodeGen/CGClass.cpp index d5c5fd2322..05894465d2 100644 --- a/lib/CodeGen/CGClass.cpp +++ b/lib/CodeGen/CGClass.cpp @@ -788,19 +788,22 @@ namespace { return; } - unsigned FirstFieldAlign = ~0U; // Set to invalid. + CharUnits Alignment; if (FirstField->isBitField()) { const CGRecordLayout &RL = CGF.getTypes().getCGRecordLayout(FirstField->getParent()); const CGBitFieldInfo &BFInfo = RL.getBitFieldInfo(FirstField); - FirstFieldAlign = BFInfo.StorageAlignment; - } else - FirstFieldAlign = CGF.getContext().getTypeAlign(FirstField->getType()); + Alignment = CharUnits::fromQuantity(BFInfo.StorageAlignment); + } else { + unsigned AlignBits = + CGF.getContext().getTypeAlign(FirstField->getType()); + Alignment = CGF.getContext().toCharUnitsFromBits(AlignBits); + } + + assert((CGF.getContext().toCharUnitsFromBits(FirstFieldOffset) % + Alignment) == 0 && "Bad field alignment."); - assert(FirstFieldOffset % FirstFieldAlign == 0 && "Bad field alignment."); - CharUnits Alignment = - CGF.getContext().toCharUnitsFromBits(FirstFieldAlign); CharUnits MemcpySize = getMemcpySize(); QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl); llvm::Value *ThisPtr = CGF.LoadCXXThis(); |