1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
// 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>();
}
|