From 737c502a3f259fc3790542366597c7e3fccad6fd Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sun, 19 Apr 2009 00:44:02 +0000 Subject: [PATCH] Reuse ObjcIvarOffsetVariable instead of duplicating code. - No functionality change (but added a FIXME). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69496 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGObjCMac.cpp | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index 7610ffc189..3a35ea4125 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -4519,30 +4519,17 @@ llvm::Constant * CGObjCNonFragileABIMac::EmitIvarOffsetVar( const ObjCInterfaceDecl *ID, const ObjCIvarDecl *Ivar, unsigned long int Offset) { - - assert(ID && "EmitIvarOffsetVar - null interface decl."); - std::string ExternalName("OBJC_IVAR_$_" + ID->getNameAsString() + '.' - + Ivar->getNameAsString()); - llvm::Constant *Init = llvm::ConstantInt::get(ObjCTypes.LongTy, Offset); - llvm::GlobalVariable *IvarOffsetGV = - CGM.getModule().getGlobalVariable(ExternalName); - if (IvarOffsetGV) - // ivar offset symbol already built due to user code referencing it. - IvarOffsetGV->setInitializer(Init); - else - IvarOffsetGV = - new llvm::GlobalVariable(Init->getType(), - false, - llvm::GlobalValue::ExternalLinkage, - Init, - ExternalName, - &CGM.getModule()); + llvm::GlobalVariable *IvarOffsetGV = ObjCIvarOffsetVariable(ID, Ivar); + IvarOffsetGV->setInitializer(llvm::ConstantInt::get(ObjCTypes.LongTy, + Offset)); IvarOffsetGV->setAlignment( CGM.getTargetData().getPrefTypeAlignment(ObjCTypes.LongTy)); - // @private and @package have hidden visibility. - bool globalVisibility = (Ivar->getAccessControl() == ObjCIvarDecl::Public || - Ivar->getAccessControl() == ObjCIvarDecl::Protected); - if (!globalVisibility || CGM.getDeclVisibilityMode(ID) == LangOptions::Hidden) + + // FIXME: This matches gcc, but shouldn't the visibility be set on + // the use as well (i.e., in ObjCIvarOffsetVariable). + if (Ivar->getAccessControl() == ObjCIvarDecl::Private || + Ivar->getAccessControl() == ObjCIvarDecl::Package || + CGM.getDeclVisibilityMode(ID) == LangOptions::Hidden) IvarOffsetGV->setVisibility(llvm::GlobalValue::HiddenVisibility); else IvarOffsetGV->setVisibility(llvm::GlobalValue::DefaultVisibility); -- 2.40.0