1*c1298878SErich Keane // RUN: %clang_cc1 %s -verify -fopenacc 2*c1298878SErich Keane Func(int i,int j)3*c1298878SErich Keanevoid Func(int i, int j) { 4*c1298878SErich Keane int array[5]; 5*c1298878SErich Keane #pragma acc parallel private(array[:]) 6*c1298878SErich Keane while (true); 7*c1298878SErich Keane #pragma acc parallel private(array[i:]) 8*c1298878SErich Keane while (true); 9*c1298878SErich Keane #pragma acc parallel private(array[:j]) 10*c1298878SErich Keane while (true); 11*c1298878SErich Keane #pragma acc parallel private(array[i:j]) 12*c1298878SErich Keane while (true); 13*c1298878SErich Keane #pragma acc parallel private(array[1:2]) 14*c1298878SErich Keane while (true); 15*c1298878SErich Keane 16*c1298878SErich Keane // expected-error@+1{{expected unqualified-id}} 17*c1298878SErich Keane #pragma acc parallel private(array[::]) 18*c1298878SErich Keane while (true); 19*c1298878SErich Keane // expected-error@+2{{expected ']'}} 20*c1298878SErich Keane // expected-note@+1{{to match this '['}} 21*c1298878SErich Keane #pragma acc parallel private(array[1::]) 22*c1298878SErich Keane while (true); 23*c1298878SErich Keane // expected-error@+2{{expected ']'}} 24*c1298878SErich Keane // expected-note@+1{{to match this '['}} 25*c1298878SErich Keane #pragma acc parallel private(array[:2:]) 26*c1298878SErich Keane while (true); 27*c1298878SErich Keane // expected-error@+3{{expected unqualified-id}} 28*c1298878SErich Keane // expected-error@+2{{expected ']'}} 29*c1298878SErich Keane // expected-note@+1{{to match this '['}} 30*c1298878SErich Keane #pragma acc parallel private(array[::3]) 31*c1298878SErich Keane while (true); 32*c1298878SErich Keane // expected-error@+2{{expected ']'}} 33*c1298878SErich Keane // expected-note@+1{{to match this '['}} 34*c1298878SErich Keane #pragma acc parallel private(array[1:2:3]) 35*c1298878SErich Keane while (true); 36*c1298878SErich Keane } 37*c1298878SErich Keane 38*c1298878SErich Keane template<typename T, unsigned I, auto &IPtr>// #IPTR TemplFunc()39*c1298878SErich Keanevoid TemplFunc() { 40*c1298878SErich Keane T array[I]; 41*c1298878SErich Keane T array2[2*I]; 42*c1298878SErich Keane T t; // #tDecl 43*c1298878SErich Keane #pragma acc parallel private(array[:]) 44*c1298878SErich Keane while (true); 45*c1298878SErich Keane #pragma acc parallel private(array[t:]) 46*c1298878SErich Keane while (true); 47*c1298878SErich Keane #pragma acc parallel private(array[I-1:]) 48*c1298878SErich Keane while (true); 49*c1298878SErich Keane #pragma acc parallel private(array[IPtr:]) 50*c1298878SErich Keane while (true); 51*c1298878SErich Keane #pragma acc parallel private(array[:t]) 52*c1298878SErich Keane while (true); 53*c1298878SErich Keane #pragma acc parallel private(array[:I]) 54*c1298878SErich Keane while (true); 55*c1298878SErich Keane #pragma acc parallel private(array[:IPtr]) 56*c1298878SErich Keane while (true); 57*c1298878SErich Keane #pragma acc parallel private(array[t:t]) 58*c1298878SErich Keane while (true); 59*c1298878SErich Keane #pragma acc parallel private(array2[I:I]) 60*c1298878SErich Keane while (true); 61*c1298878SErich Keane #pragma acc parallel private(array[IPtr:IPtr]) 62*c1298878SErich Keane while (true); 63*c1298878SErich Keane 64*c1298878SErich Keane // expected-error@+1{{expected unqualified-id}} 65*c1298878SErich Keane #pragma acc parallel private(array[::]) 66*c1298878SErich Keane while (true); 67*c1298878SErich Keane // expected-error@+3{{'t' is not a class, namespace, or enumeration}} 68*c1298878SErich Keane // expected-note@#tDecl{{'t' declared here}} 69*c1298878SErich Keane // expected-error@+1{{expected unqualified-id}} 70*c1298878SErich Keane #pragma acc parallel private(array[t::]) 71*c1298878SErich Keane while (true); 72*c1298878SErich Keane // expected-error@+2{{expected ']'}} 73*c1298878SErich Keane // expected-note@+1{{to match this '['}} 74*c1298878SErich Keane #pragma acc parallel private(array[:I:]) 75*c1298878SErich Keane while (true); 76*c1298878SErich Keane // expected-error@+2{{no member named 'IPtr' in the global namespace}} 77*c1298878SErich Keane // expected-note@#IPTR{{'IPtr' declared here}} 78*c1298878SErich Keane #pragma acc parallel private(array[::IPtr]) 79*c1298878SErich Keane while (true); 80*c1298878SErich Keane // expected-error@+2{{expected ']'}} 81*c1298878SErich Keane // expected-note@+1{{to match this '['}} 82*c1298878SErich Keane #pragma acc parallel private(array[IPtr:I:t]) 83*c1298878SErich Keane while (true); 84*c1298878SErich Keane } 85*c1298878SErich Keane use()86*c1298878SErich Keanevoid use() { 87*c1298878SErich Keane static constexpr int SomeI = 1; 88*c1298878SErich Keane TemplFunc<int, 5, SomeI>(); 89*c1298878SErich Keane } 90