diff options
Diffstat (limited to 'lib/CodeGen/CGExprConstant.cpp')
-rw-r--r-- | lib/CodeGen/CGExprConstant.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/CodeGen/CGExprConstant.cpp b/lib/CodeGen/CGExprConstant.cpp index 0975d256ba..59317f2a29 100644 --- a/lib/CodeGen/CGExprConstant.cpp +++ b/lib/CodeGen/CGExprConstant.cpp @@ -77,7 +77,11 @@ private: bool ConstStructBuilder:: AppendField(const FieldDecl *Field, uint64_t FieldOffset, llvm::Constant *InitCst) { - uint64_t FieldOffsetInBytes = FieldOffset / 8; + + const ASTContext &Context = CGM.getContext(); + + CharUnits FieldOffsetInChars = Context.toCharUnitsFromBits(FieldOffset); + uint64_t FieldOffsetInBytes = FieldOffsetInChars.getQuantity(); assert(NextFieldOffsetInBytes <= FieldOffsetInBytes && "Field offset mismatch!"); @@ -100,9 +104,9 @@ AppendField(const FieldDecl *Field, uint64_t FieldOffset, if (AlignedNextFieldOffsetInBytes < FieldOffsetInBytes) { // We need to append padding. AppendPadding( - CharUnits::fromQuantity(FieldOffsetInBytes - NextFieldOffsetInBytes)); + FieldOffsetInChars - CharUnits::fromQuantity(NextFieldOffsetInBytes)); - assert(NextFieldOffsetInBytes == FieldOffsetInBytes && + assert(NextFieldOffsetInBytes == FieldOffsetInChars.getQuantity() && "Did not add enough padding!"); AlignedNextFieldOffsetInBytes = NextFieldOffsetInBytes; |