aboutsummaryrefslogtreecommitdiff
path: root/CodeGen/CodeGenTypes.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-10-31 21:01:37 +0000
committerDevang Patel <dpatel@apple.com>2007-10-31 21:01:37 +0000
commit9e124d96ab4af601c943da5c15c616d5ddb26237 (patch)
tree4866e925904e5857d4c340aebab4d0679a4da2d2 /CodeGen/CodeGenTypes.cpp
parentb4292f221fb879fd2274683ace4f73d3d99af8c5 (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.cpp5
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);