// 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>();
}