]> granicus.if.org Git - clang/commitdiff
IRgen/NeXT: Simplify to use AST record layout for getting offsets instead of the
authorDaniel Dunbar <daniel@zuster.org>
Wed, 14 Apr 2010 17:02:21 +0000 (17:02 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 14 Apr 2010 17:02:21 +0000 (17:02 +0000)
IRgen record layout, which this code doesn't need to depend on.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101257 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGObjCMac.cpp

index 8cd7cdbfe6aebe304410c4bc525add0f36fb3d41..1f56bb7e16847c95707f24c7eb24d55eaf5dcd54 100644 (file)
@@ -3171,19 +3171,10 @@ void CGObjCCommonMac::BuildAggrIvarLayout(const ObjCImplementationDecl *OI,
     FieldDecl *Field = RecFields[i];
     uint64_t FieldOffset;
     if (RD) {
-      const CGRecordLayout &RL =
-        CGM.getTypes().getCGRecordLayout(Field->getParent());
-      if (Field->isBitField()) {
-        const CGBitFieldInfo &Info = RL.getBitFieldInfo(Field);
-
-        const llvm::Type *Ty =
-          CGM.getTypes().ConvertTypeForMemRecursive(Field->getType());
-        uint64_t TypeSize =
-          CGM.getTypes().getTargetData().getTypeAllocSize(Ty);
-        FieldOffset = Info.FieldNo * TypeSize;
-      } else
-        FieldOffset =
-          Layout->getElementOffset(RL.getLLVMFieldNo(Field));
+      // Note that 'i' here is actually the field index inside RD of Field,
+      // although this dependency is hidden.
+      const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
+      FieldOffset = RL.getFieldOffset(i) / 8;
     } else
       FieldOffset = ComputeIvarBaseOffset(CGM, OI, cast<ObjCIvarDecl>(Field));