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 | |
12 | int 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 | |
28 | int doesConform(id foo) { |
29 | return [foo conformsToProtocol:@protocol(TestProtocol)]; // expected-error {{@protocol is using a forward protocol declaration of 'TestProtocol'}} |
30 | } |
31 | |
32 | int doesConformSuper(id foo) { |
33 | return [foo conformsToProtocol:@protocol(SuperProtocol)]; // expected-error {{@protocol is using a forward protocol declaration of 'SuperProtocol'}} |
34 | } |
35 | |