| // RUN: %clang_cc1 %s -verify -fopenacc |
| |
| void Func(int i, int j) { |
| int array[5]; |
| #pragma acc parallel private(array[:]) |
| while (true); |
| #pragma acc parallel private(array[i:]) |
| while (true); |
| #pragma acc parallel private(array[:j]) |
| while (true); |
| #pragma acc parallel private(array[i:j]) |
| while (true); |
| #pragma acc parallel private(array[1:2]) |
| while (true); |
| |
| // expected-error@+1{{expected unqualified-id}} |
| #pragma acc parallel private(array[::]) |
| while (true); |
| // expected-error@+2{{expected ']'}} |
| // expected-note@+1{{to match this '['}} |
| #pragma acc parallel private(array[1::]) |
| while (true); |
| // expected-error@+2{{expected ']'}} |
| // expected-note@+1{{to match this '['}} |
| #pragma acc parallel private(array[:2:]) |
| while (true); |
| // expected-error@+3{{expected unqualified-id}} |
| // expected-error@+2{{expected ']'}} |
| // expected-note@+1{{to match this '['}} |
| #pragma acc parallel private(array[::3]) |
| while (true); |
| // expected-error@+2{{expected ']'}} |
| // expected-note@+1{{to match this '['}} |
| #pragma acc parallel private(array[1:2:3]) |
| while (true); |
| } |
| |
| template<typename T, unsigned I, auto &IPtr>// #IPTR |
| void TemplFunc() { |
| T array[I]; |
| T array2[2*I]; |
| T t; // #tDecl |
| #pragma acc parallel private(array[:]) |
| while (true); |
| #pragma acc parallel private(array[t:]) |
| while (true); |
| #pragma acc parallel private(array[I-1:]) |
| while (true); |
| #pragma acc parallel private(array[IPtr:]) |
| while (true); |
| #pragma acc parallel private(array[:t]) |
| while (true); |
| #pragma acc parallel private(array[:I]) |
| while (true); |
| #pragma acc parallel private(array[:IPtr]) |
| while (true); |
| #pragma acc parallel private(array[t:t]) |
| while (true); |
| #pragma acc parallel private(array2[I:I]) |
| while (true); |
| #pragma acc parallel private(array[IPtr:IPtr]) |
| while (true); |
| |
| // expected-error@+1{{expected unqualified-id}} |
| #pragma acc parallel private(array[::]) |
| while (true); |
| // expected-error@+3{{'t' is not a class, namespace, or enumeration}} |
| // expected-note@#tDecl{{'t' declared here}} |
| // expected-error@+1{{expected unqualified-id}} |
| #pragma acc parallel private(array[t::]) |
| while (true); |
| // expected-error@+2{{expected ']'}} |
| // expected-note@+1{{to match this '['}} |
| #pragma acc parallel private(array[:I:]) |
| while (true); |
| // expected-error@+2{{no member named 'IPtr' in the global namespace}} |
| // expected-note@#IPTR{{'IPtr' declared here}} |
| #pragma acc parallel private(array[::IPtr]) |
| while (true); |
| // expected-error@+2{{expected ']'}} |
| // expected-note@+1{{to match this '['}} |
| #pragma acc parallel private(array[IPtr:I:t]) |
| while (true); |
| } |
| |
| void use() { |
| static constexpr int SomeI = 1; |
| TemplFunc<int, 5, SomeI>(); |
| } |