diff options
| author | David Chisnall <csdavec@swan.ac.uk> | 2010-04-19 01:37:25 +0000 |
|---|---|---|
| committer | David Chisnall <csdavec@swan.ac.uk> | 2010-04-19 01:37:25 +0000 |
| commit | 44ec555a87aa1639eadc8dd7ee80427be6aee957 (patch) | |
| tree | b71de49606064c315b43f5103aac0beeb6a6fbb0 /clang/lib | |
| parent | 18cf7378de8098508e9d86013ed8774cbec3961f (diff) | |
| download | bcm5719-llvm-44ec555a87aa1639eadc8dd7ee80427be6aee957.tar.gz bcm5719-llvm-44ec555a87aa1639eadc8dd7ee80427be6aee957.zip | |
Don't just emit ivar metadata - emit CORRECT ivar metadata. (GNU runtime)
llvm-svn: 101759
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/CGObjCGNU.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp index da4fb35a461..fe99c6ef335 100644 --- a/clang/lib/CodeGen/CGObjCGNU.cpp +++ b/clang/lib/CodeGen/CGObjCGNU.cpp @@ -1304,7 +1304,7 @@ void CGObjCGNU::GenerateClass(const ObjCImplementationDecl *OID) { Context.getObjCEncodingForType(IVD->getType(), TypeStr); IvarTypes.push_back(MakeConstantString(TypeStr)); // Get the offset - uint64_t BaseOffset = ComputeIvarBaseOffset(CGM, ClassDecl, IVD); + uint64_t BaseOffset = ComputeIvarBaseOffset(CGM, OID, IVD); uint64_t Offset = BaseOffset; if (CGM.getContext().getLangOptions().ObjCNonFragileABI) { Offset = BaseOffset - superInstanceSize; @@ -2055,7 +2055,13 @@ llvm::GlobalVariable *CGObjCGNU::ObjCIvarOffsetVariable( // when linked against code which isn't (most of the time). llvm::GlobalVariable *IvarOffsetPointer = TheModule.getNamedGlobal(Name); if (!IvarOffsetPointer) { - uint64_t Offset = ComputeIvarBaseOffset(CGM, ID, Ivar); + uint64_t Offset; + if (ObjCImplementationDecl *OID = + CGM.getContext().getObjCImplementation((ObjCInterfaceDecl*)(ID))) + Offset = ComputeIvarBaseOffset(CGM, OID, Ivar); + else + Offset = ComputeIvarBaseOffset(CGM, ID, Ivar); + llvm::ConstantInt *OffsetGuess = llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), Offset, "ivar"); // Don't emit the guess in non-PIC code because the linker will not be able |

