aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGObjCMac.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/CGObjCMac.cpp')
-rw-r--r--lib/CodeGen/CGObjCMac.cpp38
1 files changed, 8 insertions, 30 deletions
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index c69f5937d0..153c8681a0 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -440,8 +440,6 @@ protected:
llvm::Constant *BuildIvarLayout(const ObjCImplementationDecl *OI,
bool ForStrongLayout);
- bool IsClassHidden(const ObjCInterfaceDecl *ID);
-
void BuildAggrIvarLayout(const ObjCInterfaceDecl *OI,
const llvm::StructLayout *Layout,
const RecordDecl *RD,
@@ -1441,23 +1439,6 @@ enum ClassFlags {
eClassFlags_ABI2_HasCXXStructors = 0x00004 // <rdr://4923634>
};
-bool CGObjCCommonMac::IsClassHidden(const ObjCInterfaceDecl *ID) {
- if (const VisibilityAttr *attr = ID->getAttr<VisibilityAttr>()) {
- switch (attr->getVisibility()) {
- default:
- assert(0 && "Unknown visibility");
- return false;
- case VisibilityAttr::DefaultVisibility:
- case VisibilityAttr::ProtectedVisibility: // FIXME: What do we do here?
- return false;
- case VisibilityAttr::HiddenVisibility:
- return true;
- }
- } else
- return (CGM.getLangOptions().getVisibilityMode() ==
- LangOptions::HiddenVisibility);
-}
-
/*
struct _objc_class {
Class isa;
@@ -1494,7 +1475,7 @@ void CGObjCMac::GenerateClass(const ObjCImplementationDecl *ID) {
unsigned Size = CGM.getTargetData().getTypePaddedSize(InterfaceTy);
// FIXME: Set CXX-structors flag.
- if (IsClassHidden(ID->getClassInterface()))
+ if (CGM.getDeclVisibilityMode(ID->getClassInterface()) == LangOptions::Hidden)
Flags |= eClassFlags_Hidden;
std::vector<llvm::Constant*> InstanceMethods, ClassMethods;
@@ -1571,7 +1552,7 @@ llvm::Constant *CGObjCMac::EmitMetaClass(const ObjCImplementationDecl *ID,
unsigned Flags = eClassFlags_Meta;
unsigned Size = CGM.getTargetData().getTypePaddedSize(ObjCTypes.ClassTy);
- if (IsClassHidden(ID->getClassInterface()))
+ if (CGM.getDeclVisibilityMode(ID->getClassInterface()) == LangOptions::Hidden)
Flags |= eClassFlags_Hidden;
std::vector<llvm::Constant*> Values(12);
@@ -4226,7 +4207,8 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
llvm::GlobalVariable *SuperClassGV, *IsAGV;
- bool classIsHidden = IsClassHidden(ID->getClassInterface());
+ bool classIsHidden =
+ CGM.getDeclVisibilityMode(ID->getClassInterface()) == LangOptions::Hidden;
if (classIsHidden)
flags |= OBJC2_CLS_HIDDEN;
if (!ID->getClassInterface()->getSuperClass()) {
@@ -4547,13 +4529,10 @@ llvm::Constant * CGObjCNonFragileABIMac::EmitIvarOffsetVar(
CGM.getTargetData().getPrefTypeAlignment(ObjCTypes.LongTy));
// @private and @package have hidden visibility.
bool globalVisibility = (Ivar->getAccessControl() == ObjCIvarDecl::Public ||
- Ivar->getAccessControl() == ObjCIvarDecl::Protected);
- if (!globalVisibility)
+ Ivar->getAccessControl() == ObjCIvarDecl::Protected);
+ if (!globalVisibility || CGM.getDeclVisibilityMode(ID) == LangOptions::Hidden)
IvarOffsetGV->setVisibility(llvm::GlobalValue::HiddenVisibility);
- else if (IsClassHidden(ID))
- IvarOffsetGV->setVisibility(llvm::GlobalValue::HiddenVisibility);
- else if (CGM.getLangOptions().getVisibilityMode() ==
- LangOptions::DefaultVisibility)
+ else
IvarOffsetGV->setVisibility(llvm::GlobalValue::DefaultVisibility);
IvarOffsetGV->setSection("__DATA, __objc_const");
UsedGlobals.push_back(IvarOffsetGV);
@@ -5633,8 +5612,7 @@ CGObjCNonFragileABIMac::GetInterfaceEHType(const ObjCInterfaceDecl *ID,
&CGM.getModule());
}
- if (CGM.getLangOptions().getVisibilityMode() ==
- LangOptions::HiddenVisibility)
+ if (CGM.getLangOptions().getVisibilityMode() == LangOptions::Hidden)
Entry->setVisibility(llvm::GlobalValue::HiddenVisibility);
Entry->setAlignment(8);