1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li 3*67e74705SXin Li@class Protocol; 4*67e74705SXin Li 5*67e74705SXin Li@protocol fproto; // expected-note {{'fproto' declared here}} 6*67e74705SXin Li 7*67e74705SXin Li@protocol p1 8*67e74705SXin Li@end 9*67e74705SXin Li 10*67e74705SXin Li@class cl; 11*67e74705SXin Li 12*67e74705SXin Liint main() 13*67e74705SXin Li{ 14*67e74705SXin Li Protocol *proto = @protocol(p1); 15*67e74705SXin Li Protocol *fproto = @protocol(fproto); // expected-warning {{@protocol is using a forward protocol declaration of fproto}} 16*67e74705SXin Li Protocol *pp = @protocol(i); // expected-error {{cannot find protocol declaration for 'i'}} 17*67e74705SXin Li Protocol *p1p = @protocol(cl); // expected-error {{cannot find protocol declaration for 'cl'}} 18*67e74705SXin Li} 19*67e74705SXin Li 20*67e74705SXin Li// rdar://17768630 21*67e74705SXin Li@protocol SuperProtocol; // expected-note {{'SuperProtocol' declared here}} 22*67e74705SXin Li@protocol TestProtocol; // expected-note {{'TestProtocol' declared here}} 23*67e74705SXin Li 24*67e74705SXin Li@interface I 25*67e74705SXin Li- (int) conformsToProtocol : (Protocol *)protocl; 26*67e74705SXin Li@end 27*67e74705SXin Li 28*67e74705SXin Liint doesConform(id foo) { 29*67e74705SXin Li return [foo conformsToProtocol:@protocol(TestProtocol)]; // expected-warning {{@protocol is using a forward protocol declaration of TestProtocol}} 30*67e74705SXin Li} 31*67e74705SXin Li 32*67e74705SXin Liint doesConformSuper(id foo) { 33*67e74705SXin Li return [foo conformsToProtocol:@protocol(SuperProtocol)]; // expected-warning {{@protocol is using a forward protocol declaration of SuperProtocol}} 34*67e74705SXin Li} 35