Allow protocols to be just declared.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@217704 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2014-09-12 20:14:20 +00:00
parent c419beb43f
commit 6588d9f885
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