aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGObjCMac.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-04-22 23:00:43 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-04-22 23:00:43 +0000
commitc71303de3e295d19c3617b6738da009f6e679337 (patch)
treeaffa2cc05d215122ae808aa11b796f6d7e77821e /lib/CodeGen/CGObjCMac.cpp
parent2512308525ff328aa992da0b5ee14a488d2ea93a (diff)
ivar layout bitmap is alive!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69838 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGObjCMac.cpp')
-rw-r--r--lib/CodeGen/CGObjCMac.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index e93ea2f19b..d8ffbbe0de 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -1918,8 +1918,8 @@ void CGObjCMac::GenerateClass(const ObjCImplementationDecl *ID) {
Values[ 8] = llvm::Constant::getNullValue(ObjCTypes.CachePtrTy);
Values[ 9] = Protocols;
// FIXME: Set ivar_layout
- // Values[10] = BuildIvarLayout(ID, true);
- Values[10] = GetIvarLayoutName(0, ObjCTypes);
+ Values[10] = BuildIvarLayout(ID, true);
+ // Values[10] = GetIvarLayoutName(0, ObjCTypes);
Values[11] = EmitClassExtension(ID);
llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ClassTy,
Values);
@@ -2043,8 +2043,8 @@ CGObjCMac::EmitClassExtension(const ObjCImplementationDecl *ID) {
std::vector<llvm::Constant*> Values(3);
Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size);
// FIXME: Output weak_ivar_layout string.
- // Values[1] = BuildIvarLayout(ID, false);
- Values[1] = GetIvarLayoutName(0, ObjCTypes);
+ Values[1] = BuildIvarLayout(ID, false);
+ // Values[1] = GetIvarLayoutName(0, ObjCTypes);
Values[2] = EmitPropertyList("\01l_OBJC_$_PROP_LIST_" + ID->getNameAsString(),
ID, ID->getClassInterface(), ObjCTypes);
@@ -4160,9 +4160,9 @@ llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassRoTInitializer(
Values[ 2] = llvm::ConstantInt::get(ObjCTypes.IntTy, InstanceSize);
// FIXME. For 64bit targets add 0 here.
// FIXME. ivarLayout is currently null!
- // Values[ 3] = (flags & CLS_META) ? GetIvarLayoutName(0, ObjCTypes)
- // : BuildIvarLayout(ID, true);
- Values[ 3] = GetIvarLayoutName(0, ObjCTypes);
+ Values[ 3] = (flags & CLS_META) ? GetIvarLayoutName(0, ObjCTypes)
+ : BuildIvarLayout(ID, true);
+ // Values[ 3] = GetIvarLayoutName(0, ObjCTypes);
Values[ 4] = GetClassName(ID->getIdentifier());
// const struct _method_list_t * const baseMethods;
std::vector<llvm::Constant*> Methods;
@@ -4212,9 +4212,9 @@ llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassRoTInitializer(
else
Values[ 7] = EmitIvarList(ID);
// FIXME. weakIvarLayout is currently null.
- // Values[ 8] = (flags & CLS_META) ? GetIvarLayoutName(0, ObjCTypes)
- // : BuildIvarLayout(ID, false);
- Values[ 8] = GetIvarLayoutName(0, ObjCTypes);
+ Values[ 8] = (flags & CLS_META) ? GetIvarLayoutName(0, ObjCTypes)
+ : BuildIvarLayout(ID, false);
+ // Values[ 8] = GetIvarLayoutName(0, ObjCTypes);
if (flags & CLS_META)
Values[ 9] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy);
else
@@ -4296,6 +4296,16 @@ void CGObjCNonFragileABIMac::GetClassSizeInfo(const ObjCInterfaceDecl *OID,
const llvm::Type *FieldTy =
CGM.getTypes().ConvertTypeForMem(Last->getType());
unsigned Size = CGM.getTargetData().getTypePaddedSize(FieldTy);
+// FIXME. This breaks compatibility with llvm-gcc-4.2 (but makes it compatible
+// with gcc-4.2). We postpone this for now.
+#if 0
+ if (Last->isBitField()) {
+ Expr *BitWidth = Last->getBitWidth();
+ uint64_t BitFieldSize =
+ BitWidth->getIntegerConstantExprValue(CGM.getContext()).getZExtValue();
+ Size = (BitFieldSize / 8) + ((BitFieldSize % 8) != 0);
+ }
+#endif
InstanceSize = ComputeIvarBaseOffset(CGM, OID, Last) + Size;
}