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

llvm-svn: 216676
This commit is contained in:
Fariborz Jahanian 2014-08-28 17:05:17 +00:00
parent 33375375a4
commit 85b99da72a
2 changed files with 19 additions and 2 deletions

View File

@ -6794,8 +6794,7 @@ CGObjCNonFragileABIMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
// If this is a class message the metaclass is passed as the target. // If this is a class message the metaclass is passed as the target.
llvm::Value *Target; llvm::Value *Target;
if (IsClassMessage) if (IsClassMessage)
Target = EmitMetaClassRef(CGF, Class, Target = EmitMetaClassRef(CGF, Class, Class->isWeakImported());
(isCategoryImpl && Class->isWeakImported()));
else else
Target = EmitSuperClassRef(CGF, Class); Target = EmitSuperClassRef(CGF, Class);

View File

@ -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