From: Fariborz Jahanian Date: Thu, 28 Aug 2014 17:05:17 +0000 (+0000) Subject: Objective-C IRGen. Fixes an assertion crash caused by inconsistent X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=327ee9cfdf49daa0dcd337944e0e3ff3bb3e0ca6;p=clang Objective-C IRGen. Fixes an assertion crash caused by inconsistent 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 --- diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index bd9852f59e..1d1ddee298 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -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 index 0000000000..cbd17514a5 --- /dev/null +++ b/test/CodeGenObjC/private-extern-selector-reference.m @@ -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