Merged to 7.0 in r339233.
On Tue, Aug 7, 2018 at 2:02 PM, David Chisnall via cfe-commits <cfe-commits@lists.llvm.org> wrote: > Author: theraven > Date: Tue Aug 7 05:02:46 2018 > New Revision: 339128 > > URL: http://llvm.org/viewvc/llvm-project?rev=339128&view=rev > Log: > [objc-gnustep] Don't emit .guess ivar offset vars. > > These were intended to allow non-fragile and fragile ABI code to be > mixed, as long as the fragile classes were higher up the hierarchy than > the non-fragile ones. Unfortunately: > > - No one actually wants to do this. > - Recent versions of Linux's run-time linker break it. > > Modified: > cfe/trunk/lib/CodeGen/CGObjCGNU.cpp > > Modified: cfe/trunk/lib/CodeGen/CGObjCGNU.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCGNU.cpp?rev=339128&r1=339127&r2=339128&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/CGObjCGNU.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGObjCGNU.cpp Tue Aug 7 05:02:46 2018 > @@ -3812,40 +3812,10 @@ llvm::GlobalVariable *CGObjCGNU::ObjCIva > // is. This allows code compiled with non-fragile ivars to work correctly > // when linked against code which isn't (most of the time). > llvm::GlobalVariable *IvarOffsetPointer = TheModule.getNamedGlobal(Name); > - if (!IvarOffsetPointer) { > - // This will cause a run-time crash if we accidentally use it. A value > of > - // 0 would seem more sensible, but will silently overwrite the isa > pointer > - // causing a great deal of confusion. > - uint64_t Offset = -1; > - // We can't call ComputeIvarBaseOffset() here if we have the > - // implementation, because it will create an invalid ASTRecordLayout > object > - // that we are then stuck with forever, so we only initialize the ivar > - // offset variable with a guess if we only have the interface. The > - // initializer will be reset later anyway, when we are generating the > class > - // description. > - if (!CGM.getContext().getObjCImplementation( > - const_cast<ObjCInterfaceDecl *>(ID))) > - Offset = ComputeIvarBaseOffset(CGM, ID, Ivar); > - > - llvm::ConstantInt *OffsetGuess = llvm::ConstantInt::get(Int32Ty, Offset, > - /*isSigned*/true); > - // Don't emit the guess in non-PIC code because the linker will not be > able > - // to replace it with the real version for a library. In non-PIC code > you > - // must compile with the fragile ABI if you want to use ivars from a > - // GCC-compiled class. > - if (CGM.getLangOpts().PICLevel) { > - llvm::GlobalVariable *IvarOffsetGV = new > llvm::GlobalVariable(TheModule, > - Int32Ty, false, > - llvm::GlobalValue::PrivateLinkage, OffsetGuess, Name+".guess"); > - IvarOffsetPointer = new llvm::GlobalVariable(TheModule, > - IvarOffsetGV->getType(), false, > llvm::GlobalValue::LinkOnceAnyLinkage, > - IvarOffsetGV, Name); > - } else { > - IvarOffsetPointer = new llvm::GlobalVariable(TheModule, > - llvm::Type::getInt32PtrTy(VMContext), false, > - llvm::GlobalValue::ExternalLinkage, nullptr, Name); > - } > - } > + if (!IvarOffsetPointer) > + IvarOffsetPointer = new llvm::GlobalVariable(TheModule, > + llvm::Type::getInt32PtrTy(VMContext), false, > + llvm::GlobalValue::ExternalLinkage, nullptr, Name); > return IvarOffsetPointer; > } > > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits