Allow protocols to be just declared.

llvm-svn: 217704
This commit is contained in:
Rafael Espindola 2014-09-12 20:14:20 +00:00
parent 0e8364e912
commit 2461509cc1
2 changed files with 20 additions and 3 deletions

View File

@ -6236,7 +6236,7 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocolRef(
// contents for protocols which were referenced but never defined.
Entry =
new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolnfABITy,
false, llvm::GlobalValue::WeakAnyLinkage,
false, llvm::GlobalValue::ExternalLinkage,
nullptr,
"\01l_OBJC_PROTOCOL_$_" + PD->getObjCRuntimeNameAsString());
Entry->setSection("__DATA,__datacoal_nt,coalesced");
@ -6347,8 +6347,8 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol(
Values);
if (Entry) {
// Already created, update the initializer.
assert(Entry->hasWeakAnyLinkage());
// Already created, fix the linkage and update the initializer.
Entry->setLinkage(llvm::GlobalValue::WeakAnyLinkage);
Entry->setInitializer(Init);
} else {
Entry =

View File

@ -0,0 +1,17 @@
// RUN: %clang_cc1 -triple x86_64-apple-macosx -emit-llvm %s -o - | FileCheck %s
// Test that we produce a declaration for the protocol. It must be matched
// by a definition in another TU, so external is the correct linkage
// (not extern_weak).
// CHECK: @"\01l_OBJC_PROTOCOL_$_p1" = external global
@interface NSObject
@end
@protocol p1;
@interface I1 : NSObject <p1>
@end
@implementation I1
@end