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