| 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 | |