diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/CodeGen/CGObjCMac.cpp | 15 | ||||
-rw-r--r-- | clang/test/CodeGenObjC/class-obj-hidden-visibility.m | 6 | ||||
-rw-r--r-- | clang/test/CodeGenObjC/metadata_symbols.m | 6 |
3 files changed, 14 insertions, 13 deletions
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp index f410e213cb1..f7829264e76 100644 --- a/clang/lib/CodeGen/CGObjCMac.cpp +++ b/clang/lib/CodeGen/CGObjCMac.cpp @@ -440,6 +440,8 @@ 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, @@ -1426,10 +1428,8 @@ enum ClassFlags { eClassFlags_ABI2_HasCXXStructors = 0x00004 // <rdr://4923634> }; -// <rdr://5142207&4705298&4843145> -static bool IsClassHidden(const ObjCInterfaceDecl *ID) { +bool CGObjCCommonMac::IsClassHidden(const ObjCInterfaceDecl *ID) { if (const VisibilityAttr *attr = ID->getAttr<VisibilityAttr>()) { - // FIXME: Support -fvisibility switch (attr->getVisibility()) { default: assert(0 && "Unknown visibility"); @@ -1440,9 +1440,9 @@ static bool IsClassHidden(const ObjCInterfaceDecl *ID) { case VisibilityAttr::HiddenVisibility: return true; } - } else { - return false; // FIXME: Support -fvisibility - } + } else + return (CGM.getLangOptions().getVisibilityMode() == + LangOptions::HiddenVisibility); } /* @@ -4523,9 +4523,6 @@ llvm::Constant * CGObjCNonFragileABIMac::EmitIvarOffsetVar( 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"); diff --git a/clang/test/CodeGenObjC/class-obj-hidden-visibility.m b/clang/test/CodeGenObjC/class-obj-hidden-visibility.m new file mode 100644 index 00000000000..fc4ac12b183 --- /dev/null +++ b/clang/test/CodeGenObjC/class-obj-hidden-visibility.m @@ -0,0 +1,6 @@ +// RUN: clang-cc -fvisibility=hidden -triple x86_64-apple-darwin10 -S -o - %s | grep -e "private_extern _OBJC_" | count 2 + +@interface INTF @end + +@implementation INTF @end + diff --git a/clang/test/CodeGenObjC/metadata_symbols.m b/clang/test/CodeGenObjC/metadata_symbols.m index 7141813df45..df36a50f521 100644 --- a/clang/test/CodeGenObjC/metadata_symbols.m +++ b/clang/test/CodeGenObjC/metadata_symbols.m @@ -10,10 +10,8 @@ // RUN: clang-cc -fvisibility=hidden -triple x86_64-apple-darwin9 -emit-llvm -o %t %s && -// FIXME: This is wrong, should be hidden -// RUN: grep '@"OBJC_METACLASS_$_A" = global .*section "__DATA, __objc_data", align 8' %t && -// FIXME: This is wrong, should be hidden -// RUN: grep '@"OBJC_CLASS_$_A" = global .*section "__DATA, __objc_data", align 8' %t && +// RUN: grep '@"OBJC_METACLASS_$_A" = hidden global .*section "__DATA, __objc_data", align 8' %t && +// RUN: grep '@"OBJC_CLASS_$_A" = hidden global .*section "__DATA, __objc_data", align 8' %t && // RUN: grep '@"OBJC_EHTYPE_$_EH1" = weak hidden global .*section "__DATA,__datacoal_nt,coalesced"' %t && // RUN: grep -F 'define internal void @"\01-[A im0]"' %t && // FIXME: Should include category name. |