xref: /llvm-project/clang/test/ParserOpenACC/parse-sub-array.cpp (revision c1298878175f1f6b7f991a18550de97a699cf260)
1*c1298878SErich Keane // RUN: %clang_cc1 %s -verify -fopenacc
2*c1298878SErich Keane 
Func(int i,int j)3*c1298878SErich Keane void 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 Keane void 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 Keane void use() {
87*c1298878SErich Keane   static constexpr int SomeI = 1;
88*c1298878SErich Keane   TemplFunc<int, 5, SomeI>();
89*c1298878SErich Keane }
90