[cfe-commits] r63166 - /cfe/trunk/lib/CodeGen/CGObjCMac.cpp
Fariborz Jahanian
fjahanian at apple.com
Tue Jan 27 17:36:42 PST 2009
Author: fjahanian
Date: Tue Jan 27 19:36:42 2009
New Revision: 63166
URL: http://llvm.org/viewvc/llvm-project?rev=63166&view=rev
Log:
Set visibility of ivar offset symbols according to
accessibility of the ivar (related to objc2's
non-fragile abi).
Modified:
cfe/trunk/lib/CodeGen/CGObjCMac.cpp
Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=63166&r1=63165&r2=63166&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Tue Jan 27 19:36:42 2009
@@ -571,7 +571,7 @@
llvm::Constant *EmitIvarList(const ObjCImplementationDecl *ID);
llvm::Constant *EmitIvarOffsetVar(const ObjCImplementationDecl *ID,
- const FieldDecl *Field,
+ const ObjCIvarDecl *Ivar,
unsigned long int offset);
public:
@@ -3521,11 +3521,11 @@
llvm::Constant * CGObjCNonFragileABIMac::EmitIvarOffsetVar(
const ObjCImplementationDecl *ID,
- const FieldDecl *Field,
+ const ObjCIvarDecl *Ivar,
unsigned long int Offset) {
std::string ExternalName("\01_OBJC_IVAR_$_" + ID->getNameAsString() + '.'
- + Field->getNameAsString());
+ + Ivar->getNameAsString());
llvm::Constant *Init = llvm::ConstantInt::get(ObjCTypes.IntTy, Offset);
llvm::GlobalVariable *IvarOffsetGV =
@@ -3533,6 +3533,7 @@
if (IvarOffsetGV) {
// ivar offset symbol already built due to user code referencing it.
IvarOffsetGV->setInitializer(Init);
+ UsedGlobals.push_back(IvarOffsetGV);
return IvarOffsetGV;
}
@@ -3543,6 +3544,11 @@
Init,
ExternalName,
&CGM.getModule());
+ // @private and @package have hidden visibility.
+ bool globalVisibility = (Ivar->getAccessControl() == ObjCIvarDecl::Public ||
+ Ivar->getAccessControl() == ObjCIvarDecl::Protected);
+ if (!globalVisibility)
+ IvarOffsetGV->setVisibility(llvm::GlobalValue::HiddenVisibility);
IvarOffsetGV->setSection("__DATA, __objc_const");
UsedGlobals.push_back(IvarOffsetGV);
@@ -3589,11 +3595,14 @@
RecordDecl::field_iterator i = RD->field_begin();
while (countSuperClassIvars-- > 0)
++i;
+ ObjCInterfaceDecl::ivar_iterator I = OID->ivar_begin();
+
for (RecordDecl::field_iterator e = RD->field_end(); i != e; ++i) {
FieldDecl *Field = *i;
unsigned long offset = Layout->getElementOffset(CGM.getTypes().
getLLVMFieldNo(Field));
- Ivar[0] = EmitIvarOffsetVar(ID, Field, offset);
+ const ObjCIvarDecl *ivarDecl = *I++;
+ Ivar[0] = EmitIvarOffsetVar(ID, ivarDecl, offset);
if (Field->getIdentifier())
Ivar[1] = GetMethodVarName(Field->getIdentifier());
else
More information about the cfe-commits
mailing list