From: Devang Patel Date: Wed, 31 Oct 2007 21:01:37 +0000 (+0000) Subject: Check whether next slot meets field type's alignment requirements. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9e124d96ab4af601c943da5c15c616d5ddb26237;p=clang Check whether next slot meets field type's alignment requirements. If it does not then assert at the moment. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43576 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/CodeGen/CodeGenTypes.cpp b/CodeGen/CodeGenTypes.cpp index 745ba1d87e..7cd2ece34d 100644 --- a/CodeGen/CodeGenTypes.cpp +++ b/CodeGen/CodeGenTypes.cpp @@ -368,7 +368,10 @@ void RecordOrganizer::layoutStructFields(CodeGenTypes &CGT, const llvm::Type *Ty = CGT.ConvertType(FD->getType()); uint64_t Offset = RL.getFieldOffset(FieldNo); - assert (Offset == Cursor && "FIXME Invalid struct layout"); + unsigned align = CGT.getTargetData().getABITypeAlignment(Ty); + if (Cursor % align != 0) + assert (Offset == Cursor && "FIXME Invalid struct layout"); + Cursor += CGT.getTargetData().getTypeSizeInBits(Ty); Fields.push_back(Ty);