1// RUN: %clang_cc1 -DFIRST -fsyntax-only -verify %s 2// RUN: %clang_cc1 -DSECOND -fsyntax-only -verify %s 3// RUN: %clang_cc1 -DTHIRD -fsyntax-only -verify %s 4// RUN: %clang_cc1 -DFOURTH -fsyntax-only -verify %s 5 6@protocol P; 7@interface NSObject 8@end 9@protocol X 10@end 11@interface X : NSObject <X> 12@end 13 14@class A; 15 16#ifdef FIRST 17id<X> F1(id<[P> v) { // expected-error {{expected a type}} expected-error {{use of undeclared identifier 'P'}} expected-error {{use of undeclared identifier 'v'}} expected-note {{to match this '('}} expected-note {{to match this '<'}} 18 return 0; 19} // expected-error {{expected '>'}} 20#endif 21 22#ifdef SECOND 23id<X> F2(id<P[X> v) { // expected-error {{unknown type name 'P'}} expected-error {{unexpected interface name 'X': expected expression}} expected-error {{use of undeclared identifier 'v'}} expected-note {{to match this '('}} expected-note {{to match this '<'}} 24 return 0; 25} // expected-error {{expected '>'}} 26#endif 27 28#ifdef THIRD 29id<X> F3(id<P, P *[> v) { // expected-error {{unknown type name 'P'}} expected-error {{expected expression}} expected-error {{use of undeclared identifier 'v'}} expected-note {{to match this '('}} expected-note {{to match this '<'}} 30 return 0; 31} // expected-error {{expected '>'}} 32#endif 33 34#ifdef FOURTH 35id<X> F4(id<P, P *(> v { // expected-error {{unknown type name 'P'}} expected-error {{expected ')'}} expected-note {{to match this '('}} expected-note {{to match this '('}} expected-note {{to match this '<'}} 36 return 0; 37} // expected-error {{expected '>'}} 38#endif 39 40// expected-error {{expected parameter declarator}} // expected-error {{expected ')'}} // expected-error {{expected function body after function declarator}} 41