Clean up handling of visibility.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69027 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index c69f593..153c868 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -440,8 +440,6 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
&CGM.getModule());
}
- if (CGM.getLangOptions().getVisibilityMode() ==
- LangOptions::HiddenVisibility)
+ if (CGM.getLangOptions().getVisibilityMode() == LangOptions::Hidden)
Entry->setVisibility(llvm::GlobalValue::HiddenVisibility);
Entry->setAlignment(8);