]> granicus.if.org Git - clang/commitdiff
Objective-C IRGen. Fixes an assertion crash caused by inconsistent
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 28 Aug 2014 17:05:17 +0000 (17:05 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 28 Aug 2014 17:05:17 +0000 (17:05 +0000)
linkage related to generation of OBJC_SELECTOR_REFERENCES symbol
needed in generation of call to 'super' in a class method.
// rdar://18150301

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216676 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGObjCMac.cpp
test/CodeGenObjC/private-extern-selector-reference.m [new file with mode: 0644]

index bd9852f59e1d961847f12ccf3b8ccd595de287e0..1d1ddee2985c01de1e6cb958d2b0062f4fa1f837 100644 (file)
@@ -6794,8 +6794,7 @@ CGObjCNonFragileABIMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
   // If this is a class message the metaclass is passed as the target.
   llvm::Value *Target;
   if (IsClassMessage)
-      Target = EmitMetaClassRef(CGF, Class,
-                                (isCategoryImpl && Class->isWeakImported()));
+      Target = EmitMetaClassRef(CGF, Class, Class->isWeakImported());
   else
     Target = EmitSuperClassRef(CGF, Class);
 
diff --git a/test/CodeGenObjC/private-extern-selector-reference.m b/test/CodeGenObjC/private-extern-selector-reference.m
new file mode 100644 (file)
index 0000000..cbd1751
--- /dev/null
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -triple x86_64-apple-ios6.0.0 -emit-llvm -o - %s | FileCheck %s
+// rdar://18150301
+
+@interface Query
++ (void)_configureCI;
+@end
+
+__attribute__((visibility("default"))) __attribute__((availability(ios,introduced=7.0)))
+@interface ObserverQuery : Query @end
+
+@implementation ObserverQuery
++ (void)_configureCI {
+    [super _configureCI];
+}
+@end
+
+// CHECK: @"OBJC_METACLASS_$_ObserverQuery" = global %struct._class_t
+// CHECK: @"\01L_OBJC_SELECTOR_REFERENCES_" = private externally_initialized global