|  | // RUN: %clang_cc1 %s -verify -fopenacc | 
|  |  | 
|  | struct S { | 
|  | int foo; | 
|  | char Array[1]; | 
|  | }; | 
|  | char *getArrayPtr(); | 
|  | void func() { | 
|  | char Array[10]; | 
|  | char *ArrayPtr = getArrayPtr(); | 
|  | int *readonly; | 
|  | struct S s; | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+2{{expected '('}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+3{{expected '('}} | 
|  | // expected-error@+2{{invalid OpenACC clause 'clause'}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache clause list | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+2{{expected expression}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache() | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+3{{expected expression}} | 
|  | // expected-error@+2{{invalid OpenACC clause 'clause'}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache() clause-list | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+3{{expected ')'}} | 
|  | // expected-note@+2{{to match this '('}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache( | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+4{{use of undeclared identifier 'invalid'}} | 
|  | // expected-error@+3{{expected ')'}} | 
|  | // expected-note@+2{{to match this '('}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(invalid | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+3{{expected ')'}} | 
|  | // expected-note@+2{{to match this '('}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(ArrayPtr | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+2{{use of undeclared identifier 'invalid'}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(invalid) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(ArrayPtr) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+6{{expected expression}} | 
|  | // expected-error@+5{{expected ']'}} | 
|  | // expected-note@+4{{to match this '['}} | 
|  | // expected-error@+3{{expected ')'}} | 
|  | // expected-note@+2{{to match this '('}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(ArrayPtr[ | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+4{{expected expression}} | 
|  | // expected-error@+3{{expected ']'}} | 
|  | // expected-note@+2{{to match this '['}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(ArrayPtr[, 5) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+4{{expected expression}} | 
|  | // expected-error@+3{{expected ']'}} | 
|  | // expected-note@+2{{to match this '['}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(Array[) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(Array[*readonly]) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+6{{expected expression}} | 
|  | // expected-error@+5{{expected ']'}} | 
|  | // expected-note@+4{{to match this '['}} | 
|  | // expected-error@+3{{expected ')'}} | 
|  | // expected-note@+2{{to match this '('}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(Array[*readonly: | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+2{{invalid tag 'devnum' on 'cache' directive}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(devnum:ArrayPtr) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+2{{invalid tag 'invalid' on 'cache' directive}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(invalid:ArrayPtr) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:ArrayPtr) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:ArrayPtr[5:1]) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:ArrayPtr[5:*readonly]) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:ArrayPtr[5:*readonly], Array) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:ArrayPtr[5:*readonly], Array[*readonly:3]) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:ArrayPtr[5 + i:*readonly], Array[*readonly + i:3]) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+4{{expected expression}} | 
|  | // expected-error@+3{{expected ')'}} | 
|  | // expected-note@+2{{to match this '('}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:ArrayPtr[5:*readonly], | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-error@+2{{expected expression}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:ArrayPtr[5:*readonly],) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+2{{left operand of comma operator has no effect}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:ArrayPtr[5,6:*readonly]) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+2{{left operand of comma operator has no effect}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:ArrayPtr[5:3, *readonly], ArrayPtr[0]) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:s.foo) | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < 10; ++i) { | 
|  | // expected-warning@+2{{left operand of comma operator has no effect}} | 
|  | // expected-warning@+1{{OpenACC construct 'cache' not yet implemented, pragma ignored}} | 
|  | #pragma acc cache(readonly:s.Array[1,2]) | 
|  | } | 
|  | } |