diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-04-14 17:02:21 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-04-14 17:02:21 +0000 |
commit | d51c1a6e0981e72a6cd61e5f48efe7409d50a293 (patch) | |
tree | bada044af942cc49fa3a022406d9da556f40cc83 | |
parent | 4bfb437ec937ba3fd288e60faf5929ebc2364aaf (diff) | |
download | bcm5719-llvm-d51c1a6e0981e72a6cd61e5f48efe7409d50a293.tar.gz bcm5719-llvm-d51c1a6e0981e72a6cd61e5f48efe7409d50a293.zip |
IRgen/NeXT: Simplify to use AST record layout for getting offsets instead of the
IRgen record layout, which this code doesn't need to depend on.
llvm-svn: 101257
-rw-r--r-- | clang/lib/CodeGen/CGObjCMac.cpp | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp index 8cd7cdbfe6a..1f56bb7e168 100644 --- a/clang/lib/CodeGen/CGObjCMac.cpp +++ b/clang/lib/CodeGen/CGObjCMac.cpp @@ -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)); |