aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-05-04 23:23:09 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-05-04 23:23:09 +0000
commit6e8575b88bfb2634d7b28c0c4d5ed2a6acc8418a (patch)
tree520161afb1b1586c482f4778beed50730248a4c1 /lib/CodeGen
parent31fa7d7022877f24e001c30643de073df427d8dd (diff)
Fix the field count in interface record layout (it was incorrectly
compensating for super classes). This was making the reported class sizes for empty classes very, very wrong. - Also, we now report the size info for an empty class like gcc (as the offset of the start, not as 0, 0). - Add a few more test cases we were mishandling before (padding bit field at end of struct, for example). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70938 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/CGObjCMac.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index 1a1ef83123..1f58389ab8 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -4222,13 +4222,14 @@ void CGObjCNonFragileABIMac::GetClassSizeInfo(const ObjCImplementationDecl *OID,
const ASTRecordLayout &RL =
CGM.getContext().getASTObjCImplementationLayout(OID);
- if (!RL.getFieldCount()) {
- InstanceStart = InstanceSize = 0;
- return;
- }
-
- InstanceStart = RL.getFieldOffset(0) / 8;
+ // InstanceSize is really instance end.
InstanceSize = llvm::RoundUpToAlignment(RL.getNextOffset(), 8) / 8;
+
+ // If there are no fields, the start is the same as the end.
+ if (!RL.getFieldCount())
+ InstanceStart = InstanceSize;
+ else
+ InstanceStart = RL.getFieldOffset(0) / 8;
}
void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {