diff options
author | Devang Patel <dpatel@apple.com> | 2007-10-31 21:01:37 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2007-10-31 21:01:37 +0000 |
commit | 9e124d96ab4af601c943da5c15c616d5ddb26237 (patch) | |
tree | 4866e925904e5857d4c340aebab4d0679a4da2d2 /CodeGen/CodeGenTypes.cpp | |
parent | b4292f221fb879fd2274683ace4f73d3d99af8c5 (diff) |
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
Diffstat (limited to 'CodeGen/CodeGenTypes.cpp')
-rw-r--r-- | CodeGen/CodeGenTypes.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
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); |