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 |
17 | id<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 '('}} |
18 | return 0; |
19 | } |
20 | #endif |
21 | |
22 | #ifdef SECOND |
23 | id<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 '('}} |
24 | return 0; |
25 | } |
26 | #endif |
27 | |
28 | #ifdef THIRD |
29 | id<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 '('}} |
30 | return 0; |
31 | } |
32 | #endif |
33 | |
34 | #ifdef FOURTH |
35 | id<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 '('}} |
36 | return 0; |
37 | } |
38 | #endif |
39 | |
40 | // expected-error {{expected '>'}} // expected-error {{expected parameter declarator}} // expected-error {{expected ')'}} // expected-error {{expected function body after function declarator}} |
41 | |