|  | // RUN: clang-cc -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 | 
|  |  |