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