| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| |
| @interface INTF1 |
| @required // expected-error {{directive may only be specified in protocols only}} |
| - (int) FooBar; |
| - (int) FooBar1; |
| - (int) FooBar2; |
| @optional // expected-error {{directive may only be specified in protocols only}} |
| + (int) C; |
| |
| - (int)I; |
| @end |
| |
| @protocol p1,p2,p3; |
| |
| @protocol p1; |
| |
| @protocol PROTO1 |
| @required |
| - (int) FooBar; |
| @optional |
| - (void) MyMethod1; |
| + (int) S; |
| @end |
| |
| |
| @protocol PROTO2<p1> |
| @end |
| |
| @protocol p1 @end |
| |
| @protocol PROTO<p1> // expected-note {{previous definition is here}} |
| @end |
| |
| @protocol PROTO<p1> // expected-warning {{duplicate protocol definition of 'PROTO'}} |
| @end |
| |
| @protocol PROTO3<p1, p1> |
| @end |
| |
| @protocol p2 <p1> |
| @end |
| |
| @protocol PROTO4 <p1, p2, PROTO, PROTO3, p3> |
| @end |
| |
| |
| // rdar://6771034 |
| @protocol XX; |
| @protocol YY <XX> // Use of declaration of XX here should not cause a warning. |
| - zz; |
| @end |
| |
| |
| // Detect circular dependencies. |
| @protocol B; |
| @protocol C < B > // expected-note{{previous definition is here}} |
| @end |
| @protocol A < C > |
| @end |
| @protocol B < A > // expected-error{{protocol has circular dependency}} |
| @end |
| |