summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/CodeGen/CGObjCMac.cpp11
-rw-r--r--clang/test/CodeGenObjC/weak-metaclass-visibility.m14
2 files changed, 18 insertions, 7 deletions
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index 45fb3b6d324..de760c8eca0 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -5520,8 +5520,10 @@ void CGObjCNonFragileABIMac::FinishNonFragileABIModule() {
assert(ID);
if (ObjCImplementationDecl *IMP = ID->getImplementation())
// We are implementing a weak imported interface. Give it external linkage
- if (ID->isWeakImported() && !IMP->isWeakImported())
+ if (ID->isWeakImported() && !IMP->isWeakImported()) {
DefinedClasses[i]->setLinkage(llvm::GlobalVariable::ExternalLinkage);
+ DefinedMetaClasses[i]->setLinkage(llvm::GlobalVariable::ExternalLinkage);
+ }
}
AddModuleClassList(DefinedClasses,
@@ -5821,11 +5823,6 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
ID->getClassInterface()->isWeakImported());
IsAGV = GetClassGlobal(ObjCMetaClassName + ClassName,
ID->getClassInterface()->isWeakImported());
-
- // We are implementing a weak imported interface. Give it external
- // linkage.
- if (!ID->isWeakImported() && ID->getClassInterface()->isWeakImported())
- IsAGV->setLinkage(llvm::GlobalVariable::ExternalLinkage);
} else {
// Has a root. Current class is not a root.
const ObjCInterfaceDecl *Root = ID->getClassInterface();
@@ -5847,7 +5844,7 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
std::string TClassName = ObjCMetaClassName + ClassName;
llvm::GlobalVariable *MetaTClass = BuildClassMetaData(
TClassName, IsAGV, SuperClassGV, CLASS_RO_GV, classIsHidden,
- ID->isWeakImported());
+ ID->getClassInterface()->isWeakImported());
DefinedMetaClasses.push_back(MetaTClass);
// Metadata for the class
diff --git a/clang/test/CodeGenObjC/weak-metaclass-visibility.m b/clang/test/CodeGenObjC/weak-metaclass-visibility.m
index 128f881a5c0..b20958ad870 100644
--- a/clang/test/CodeGenObjC/weak-metaclass-visibility.m
+++ b/clang/test/CodeGenObjC/weak-metaclass-visibility.m
@@ -1,4 +1,6 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple armv7-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple arm64-apple-ios -emit-llvm -o - %s | FileCheck %s
// rdar://16206443
@interface NSObject
@@ -43,3 +45,15 @@ __attribute__((weak_import))
// CHECK: @"OBJC_METACLASS_$_NSURLQueryItem" = extern_weak global
// CHECK: @"OBJC_CLASS_$_NSURLQueryItem" = extern_weak global
+
+// rdar://17633301
+@interface AVScheduledAudioParameters @end // isWeakImported is true!!
+
+@interface XXXX : AVScheduledAudioParameters // is isWeakImported() true
+@end
+
+@implementation AVScheduledAudioParameters @end
+@implementation XXXX @end
+
+// CHECK: @"OBJC_CLASS_$_AVScheduledAudioParameters" = global %struct._class_t
+// CHECK: @"OBJC_METACLASS_$_AVScheduledAudioParameters" = global %struct._class_t
OpenPOWER on IntegriCloud