]> granicus.if.org Git - clang/commitdiff
Check whether next slot meets field type's alignment requirements.
authorDevang Patel <dpatel@apple.com>
Wed, 31 Oct 2007 21:01:37 +0000 (21:01 +0000)
committerDevang Patel <dpatel@apple.com>
Wed, 31 Oct 2007 21:01:37 +0000 (21:01 +0000)
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

CodeGen/CodeGenTypes.cpp

index 745ba1d87ebd39e89971b09e30283cf95040e565..7cd2ece34d6b9bcc3d9cab2a9f2a3ff50195ff89 100644 (file)
@@ -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);