diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-04-06 18:30:00 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-04-06 18:30:00 +0000 |
commit | 77c9fd2eee4cdac3c5a38a353788f308990598af (patch) | |
tree | 92a5fbdb80d76b2e26a2e2df3c61f10817608910 /lib/CodeGen | |
parent | 5529b24500a9cdeb45e9d4482ceb54fc39a7471e (diff) |
Fixed visibility issues related to objc2's synthesized
ivars.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68453 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/CGObjCMac.cpp | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index a354ef7fa0..426ad8c0f5 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -4493,37 +4493,34 @@ llvm::Constant * CGObjCNonFragileABIMac::EmitIvarOffsetVar( std::string ExternalName("\01_OBJC_IVAR_$_" + ID->getNameAsString() + '.' + Ivar->getNameAsString()); llvm::Constant *Init = llvm::ConstantInt::get(ObjCTypes.LongTy, Offset); - llvm::GlobalVariable *IvarOffsetGV = CGM.getModule().getGlobalVariable(ExternalName); - if (IvarOffsetGV) { + if (IvarOffsetGV) // ivar offset symbol already built due to user code referencing it. - IvarOffsetGV->setAlignment( - CGM.getTargetData().getPrefTypeAlignment(ObjCTypes.LongTy)); IvarOffsetGV->setInitializer(Init); - IvarOffsetGV->setSection("__DATA, __objc_const"); - UsedGlobals.push_back(IvarOffsetGV); - return IvarOffsetGV; - } - - IvarOffsetGV = - new llvm::GlobalVariable(Init->getType(), - false, - llvm::GlobalValue::ExternalLinkage, - Init, - ExternalName, - &CGM.getModule()); + else + IvarOffsetGV = + new llvm::GlobalVariable(Init->getType(), + false, + llvm::GlobalValue::ExternalLinkage, + Init, + ExternalName, + &CGM.getModule()); IvarOffsetGV->setAlignment( CGM.getTargetData().getPrefTypeAlignment(ObjCTypes.LongTy)); // @private and @package have hidden visibility. bool globalVisibility = (Ivar->getAccessControl() == ObjCIvarDecl::Public || - Ivar->getAccessControl() == ObjCIvarDecl::Protected); + Ivar->getAccessControl() == ObjCIvarDecl::Protected); if (!globalVisibility) IvarOffsetGV->setVisibility(llvm::GlobalValue::HiddenVisibility); - else - if (IsClassHidden(ID)) + else if (IsClassHidden(ID)) IvarOffsetGV->setVisibility(llvm::GlobalValue::HiddenVisibility); - + else if (CGM.getLangOptions().getVisibilityMode() == + LangOptions::HiddenVisibility) + IvarOffsetGV->setVisibility(llvm::GlobalValue::HiddenVisibility); + else if (CGM.getLangOptions().getVisibilityMode() == + LangOptions::DefaultVisibility) + IvarOffsetGV->setVisibility(llvm::GlobalValue::DefaultVisibility); IvarOffsetGV->setSection("__DATA, __objc_const"); UsedGlobals.push_back(IvarOffsetGV); return IvarOffsetGV; |