1c1298878SErich Keane // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s
2c1298878SErich Keane
3c1298878SErich Keane // Test this with PCH.
4c1298878SErich Keane // RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s
5c1298878SErich Keane // RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s
6c1298878SErich Keane
7c1298878SErich Keane #ifndef PCH_HELPER
8c1298878SErich Keane #define PCH_HELPER
9c1298878SErich Keane
returns_3()10c1298878SErich Keane constexpr int returns_3() { return 3; }
11c1298878SErich Keane
Func(int i,int j)12c1298878SErich Keane void Func(int i, int j) {
13c1298878SErich Keane // CHECK: FunctionDecl{{.*}}Func
14c1298878SErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} i 'int'
15c1298878SErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} j 'int'
16c1298878SErich Keane // CHECK-NEXT: CompoundStmt
17c1298878SErich Keane int array[5];
18c1298878SErich Keane // CHECK-NEXT: DeclStmt
19c1298878SErich Keane // CHECK-NEXT: VarDecl{{.*}} array 'int[5]'
20c1298878SErich Keane int VLA[i];
21c1298878SErich Keane // CHECK-NEXT: DeclStmt
22c1298878SErich Keane // CHECK-NEXT: VarDecl{{.*}} VLA 'int[i]'
23c1298878SErich Keane int *ptr;
24c1298878SErich Keane // CHECK-NEXT: DeclStmt
25c1298878SErich Keane // CHECK-NEXT: VarDecl{{.*}} ptr 'int *'
26c1298878SErich Keane
27c1298878SErich Keane #pragma acc parallel private(array[returns_3():])
28c1298878SErich Keane while (true);
29c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
30c1298878SErich Keane // CHECK-NEXT: private clause
31c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
32c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
33c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'
34c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}} 'int'
35c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
36c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
37c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
38c1298878SErich Keane // CHECK-NEXT: WhileStmt
39c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
40c1298878SErich Keane // CHECK-NEXT: NullStmt
41c1298878SErich Keane
42c1298878SErich Keane #pragma acc parallel private(array[:1])
43c1298878SErich Keane while (true);
44c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
45c1298878SErich Keane // CHECK-NEXT: private clause
46c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
47c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
48c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'
49c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
50c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1
51c1298878SErich Keane // CHECK-NEXT: WhileStmt
52c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
53c1298878SErich Keane // CHECK-NEXT: NullStmt
54c1298878SErich Keane
55c1298878SErich Keane #pragma acc parallel private(array[returns_3():1])
56c1298878SErich Keane while (true);
57c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
58c1298878SErich Keane // CHECK-NEXT: private clause
59c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
60c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
61c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'
62c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}} 'int'
63c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
64c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
65c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1
66c1298878SErich Keane // CHECK-NEXT: WhileStmt
67c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
68c1298878SErich Keane // CHECK-NEXT: NullStmt
69c1298878SErich Keane
70c1298878SErich Keane #pragma acc parallel private(array[i:j])
71c1298878SErich Keane while (true);
72c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
73c1298878SErich Keane // CHECK-NEXT: private clause
74c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
75c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
76c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'
77c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
78c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
79c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
80c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'j' 'int'
81c1298878SErich Keane // CHECK-NEXT: WhileStmt
82c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
83c1298878SErich Keane // CHECK-NEXT: NullStmt
84c1298878SErich Keane
85c1298878SErich Keane #pragma acc parallel private(VLA[:1])
86c1298878SErich Keane while (true);
87c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
88c1298878SErich Keane // CHECK-NEXT: private clause
89c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
90c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
91c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'
92c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
93c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1
94c1298878SErich Keane // CHECK-NEXT: WhileStmt
95c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
96c1298878SErich Keane // CHECK-NEXT: NullStmt
97c1298878SErich Keane
98c1298878SErich Keane #pragma acc parallel private(VLA[returns_3():1])
99c1298878SErich Keane while (true);
100c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
101c1298878SErich Keane // CHECK-NEXT: private clause
102c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
103c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
104c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'
105c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}}'int'
106c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
107c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
108c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1
109c1298878SErich Keane // CHECK-NEXT: WhileStmt
110c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
111c1298878SErich Keane // CHECK-NEXT: NullStmt
112c1298878SErich Keane
113c1298878SErich Keane #pragma acc parallel private(VLA[i:j])
114c1298878SErich Keane while (true);
115c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
116c1298878SErich Keane // CHECK-NEXT: private clause
117c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
118c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
119c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'
120c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
121c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
122c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
123c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'j' 'int'
124c1298878SErich Keane // CHECK-NEXT: WhileStmt
125c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
126c1298878SErich Keane // CHECK-NEXT: NullStmt
127c1298878SErich Keane
128c1298878SErich Keane #pragma acc parallel private(ptr[:1])
129c1298878SErich Keane while (true);
130c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
131c1298878SErich Keane // CHECK-NEXT: private clause
132c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
133c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>
134c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'
135c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
136c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1
137c1298878SErich Keane // CHECK-NEXT: WhileStmt
138c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
139c1298878SErich Keane // CHECK-NEXT: NullStmt
140c1298878SErich Keane
141c1298878SErich Keane #pragma acc parallel private(ptr[returns_3():1])
142c1298878SErich Keane while (true);
143c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
144c1298878SErich Keane // CHECK-NEXT: private clause
145c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
146c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>
147c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'
148c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}}'int'
149c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
150c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
151c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1
152c1298878SErich Keane // CHECK-NEXT: WhileStmt
153c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
154c1298878SErich Keane // CHECK-NEXT: NullStmt
155c1298878SErich Keane
156c1298878SErich Keane #pragma acc parallel private(ptr[i:j])
157c1298878SErich Keane while (true);
158c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
159c1298878SErich Keane // CHECK-NEXT: private clause
160c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
161c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>
162c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'
163c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
164c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
165c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
166c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'j' 'int'
167c1298878SErich Keane // CHECK-NEXT: WhileStmt
168c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
169c1298878SErich Keane // CHECK-NEXT: NullStmt
170c1298878SErich Keane }
171c1298878SErich Keane
172c1298878SErich Keane template<typename T, unsigned I, auto &CEArray>
Templ(int i)173c1298878SErich Keane void Templ(int i){
174c1298878SErich Keane // CHECK-NEXT: FunctionTemplateDecl{{.*}}Templ
175c1298878SErich Keane // CHECK-NEXT: TemplateTypeParmDecl{{.*}} typename depth 0 index 0 T
176c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I
177c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'auto &' depth 0 index 2 CEArray
178c1298878SErich Keane // CHECK-NEXT: FunctionDecl{{.*}}Templ 'void (int)'
179c1298878SErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} i 'int'
180c1298878SErich Keane // CHECK-NEXT: CompoundStmt
181c1298878SErich Keane T array[I+2];
182c1298878SErich Keane // CHECK-NEXT: DeclStmt
183c1298878SErich Keane // CHECK-NEXT: VarDecl{{.*}} array 'T[I + 2]'
184c1298878SErich Keane T VLA[i];
185c1298878SErich Keane // CHECK-NEXT: DeclStmt
186c1298878SErich Keane // CHECK-NEXT: VarDecl{{.*}} VLA 'T[i]'
187c1298878SErich Keane T *ptr;
188c1298878SErich Keane // CHECK-NEXT: DeclStmt
189c1298878SErich Keane // CHECK-NEXT: VarDecl{{.*}} ptr 'T *'
190c1298878SErich Keane
191c1298878SErich Keane #pragma acc parallel private(array[returns_3():])
192c1298878SErich Keane while (true);
193c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
194c1298878SErich Keane // CHECK-NEXT: private clause
195c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
196c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T[I + 2]' lvalue Var{{.*}} 'array' 'T[I + 2]'
197c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}} 'int'
198c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
199c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}}'returns_3' 'int ()'
200c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
201c1298878SErich Keane // CHECK-NEXT: WhileStmt
202c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
203c1298878SErich Keane // CHECK-NEXT: NullStmt
204c1298878SErich Keane
205c1298878SErich Keane #pragma acc parallel private(array[:I])
206c1298878SErich Keane while (true);
207c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
208c1298878SErich Keane // CHECK-NEXT: private clause
209c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
210c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T[I + 2]' lvalue Var{{.*}} 'array' 'T[I + 2]'
211c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
212c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'
213c1298878SErich Keane // CHECK-NEXT: WhileStmt
214c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
215c1298878SErich Keane // CHECK-NEXT: NullStmt
216c1298878SErich Keane
217c1298878SErich Keane #pragma acc parallel private(array[returns_3()-2:I])
218c1298878SErich Keane while (true);
219c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
220c1298878SErich Keane // CHECK-NEXT: private clause
221c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
222c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T[I + 2]' lvalue Var{{.*}} 'array' 'T[I + 2]'
223c1298878SErich Keane // CHECK-NEXT: BinaryOperator{{.*}} 'int' '-'
224c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}} 'int'
225c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
226c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
227c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 2
228c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'
229c1298878SErich Keane // CHECK-NEXT: WhileStmt
230c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
231c1298878SErich Keane // CHECK-NEXT: NullStmt
232c1298878SErich Keane
233c1298878SErich Keane #pragma acc parallel private(array[i:i])
234c1298878SErich Keane while (true);
235c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
236c1298878SErich Keane // CHECK-NEXT: private clause
237c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
238c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T[I + 2]' lvalue Var{{.*}} 'array' 'T[I + 2]'
239c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
240c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
241c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
242c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
243c1298878SErich Keane // CHECK-NEXT: WhileStmt
244c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
245c1298878SErich Keane // CHECK-NEXT: NullStmt
246c1298878SErich Keane
247c1298878SErich Keane #pragma acc parallel private(VLA[:I])
248c1298878SErich Keane while (true);
249c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
250c1298878SErich Keane // CHECK-NEXT: private clause
251c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
252c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T[i]' lvalue Var{{.*}} 'VLA' 'T[i]'
253c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
254c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'
255c1298878SErich Keane // CHECK-NEXT: WhileStmt
256c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
257c1298878SErich Keane // CHECK-NEXT: NullStmt
258c1298878SErich Keane
259c1298878SErich Keane #pragma acc parallel private(VLA[returns_3():I])
260c1298878SErich Keane while (true);
261c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
262c1298878SErich Keane // CHECK-NEXT: private clause
263c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
264c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T[i]' lvalue Var{{.*}} 'VLA' 'T[i]'
265c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}}'int'
266c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
267c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
268c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'
269c1298878SErich Keane // CHECK-NEXT: WhileStmt
270c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
271c1298878SErich Keane // CHECK-NEXT: NullStmt
272c1298878SErich Keane
273c1298878SErich Keane #pragma acc parallel private(VLA[i:i])
274c1298878SErich Keane while (true);
275c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
276c1298878SErich Keane // CHECK-NEXT: private clause
277c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
278c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T[i]' lvalue Var{{.*}} 'VLA' 'T[i]'
279c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
280c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
281c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
282c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
283c1298878SErich Keane // CHECK-NEXT: WhileStmt
284c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
285c1298878SErich Keane // CHECK-NEXT: NullStmt
286c1298878SErich Keane
287c1298878SErich Keane #pragma acc parallel private(ptr[:I])
288c1298878SErich Keane while (true);
289c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
290c1298878SErich Keane // CHECK-NEXT: private clause
291c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
292c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T *' lvalue Var{{.*}} 'ptr' 'T *'
293c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
294c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'
295c1298878SErich Keane // CHECK-NEXT: WhileStmt
296c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
297c1298878SErich Keane // CHECK-NEXT: NullStmt
298c1298878SErich Keane
299c1298878SErich Keane #pragma acc parallel private(ptr[returns_3():I])
300c1298878SErich Keane while (true);
301c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
302c1298878SErich Keane // CHECK-NEXT: private clause
303c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
304c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T *' lvalue Var{{.*}} 'ptr' 'T *'
305c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}} 'int'
306c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
307c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
308c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'
309c1298878SErich Keane // CHECK-NEXT: WhileStmt
310c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
311c1298878SErich Keane // CHECK-NEXT: NullStmt
312c1298878SErich Keane
313c1298878SErich Keane #pragma acc parallel private(ptr[i:i])
314c1298878SErich Keane while (true);
315c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
316c1298878SErich Keane // CHECK-NEXT: private clause
317c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
318c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T *' lvalue Var{{.*}} 'ptr' 'T *'
319c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
320c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
321c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
322c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
323c1298878SErich Keane // CHECK-NEXT: WhileStmt
324c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
325c1298878SErich Keane // CHECK-NEXT: NullStmt
326c1298878SErich Keane
327c1298878SErich Keane #pragma acc parallel private(CEArray[returns_3() - 2: I])
328c1298878SErich Keane while (true);
329c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
330c1298878SErich Keane // CHECK-NEXT: private clause
331c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
332c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'auto' lvalue NonTypeTemplateParm{{.*}} 'CEArray' 'auto &'
333c1298878SErich Keane // CHECK-NEXT: BinaryOperator{{.*}} 'int' '-'
334c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}} 'int'
335c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
336c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
337c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 2
338c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'
339c1298878SErich Keane // CHECK-NEXT: WhileStmt
340c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
341c1298878SErich Keane // CHECK-NEXT: NullStmt
342c1298878SErich Keane
343c1298878SErich Keane #pragma acc parallel private(CEArray[: I])
344c1298878SErich Keane while (true);
345c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
346c1298878SErich Keane // CHECK-NEXT: private clause
347c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
348c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'auto' lvalue NonTypeTemplateParm{{.*}} 'CEArray' 'auto &'
349c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
350c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'I' 'unsigned int'
351c1298878SErich Keane // CHECK-NEXT: WhileStmt
352c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
353c1298878SErich Keane // CHECK-NEXT: NullStmt
354c1298878SErich Keane
355c1298878SErich Keane
356c1298878SErich Keane // Instantiation:
357c1298878SErich Keane // CHECK-NEXT: FunctionDecl{{.*}} Templ 'void (int)' implicit_instantiation
358c1298878SErich Keane // CHECK-NEXT: TemplateArgument{{.*}} 'int'
359c1298878SErich Keane // CHECK-NEXT: BuiltinType{{.*}} 'int'
360*1a2f3309SMatheus Izvekov // CHECK-NEXT: TemplateArgument integral '3U'
361c1298878SErich Keane // CHECK-NEXT: TemplateArgument decl
362c1298878SErich Keane // CHECK-NEXT: Var{{.*}} 'CEArray' 'const int[5]'
363c1298878SErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} i 'int'
364c1298878SErich Keane // CHECK-NEXT: CompoundStmt
365c1298878SErich Keane
366c1298878SErich Keane // T array[I+2];
367c1298878SErich Keane // CHECK-NEXT: DeclStmt
368c1298878SErich Keane // CHECK-NEXT: VarDecl{{.*}} array 'int[5]'
369c1298878SErich Keane // T VLA[i];
370c1298878SErich Keane // CHECK-NEXT: DeclStmt
371c1298878SErich Keane // CHECK-NEXT: VarDecl{{.*}} VLA 'int[i]'
372c1298878SErich Keane // T *ptr;
373c1298878SErich Keane // CHECK-NEXT: DeclStmt
374c1298878SErich Keane // CHECK-NEXT: VarDecl{{.*}} ptr 'int *'
375c1298878SErich Keane
376c1298878SErich Keane //#pragma acc parallel private(array[returns_3():])
377c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
378c1298878SErich Keane // CHECK-NEXT: private clause
379c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
380c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
381c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'
382c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}} 'int'
383c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
384c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}}'returns_3' 'int ()'
385c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
386c1298878SErich Keane // CHECK-NEXT: WhileStmt
387c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
388c1298878SErich Keane // CHECK-NEXT: NullStmt
389c1298878SErich Keane
390c1298878SErich Keane //#pragma acc parallel private(array[:I])
391c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
392c1298878SErich Keane // CHECK-NEXT: private clause
393c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
394c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
395c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'
396c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
397c1298878SErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'
398c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I
399c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3
400c1298878SErich Keane // CHECK-NEXT: WhileStmt
401c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
402c1298878SErich Keane // CHECK-NEXT: NullStmt
403c1298878SErich Keane
404c1298878SErich Keane //#pragma acc parallel private(array[returns_3()-2:I])
405c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
406c1298878SErich Keane // CHECK-NEXT: private clause
407c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
408c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
409c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'
410c1298878SErich Keane // CHECK-NEXT: BinaryOperator{{.*}} 'int' '-'
411c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}} 'int'
412c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
413c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
414c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 2
415c1298878SErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'
416c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I
417c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3
418c1298878SErich Keane // CHECK-NEXT: WhileStmt
419c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
420c1298878SErich Keane // CHECK-NEXT: NullStmt
421c1298878SErich Keane
422c1298878SErich Keane //#pragma acc parallel private(array[i:i])
423c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
424c1298878SErich Keane // CHECK-NEXT: private clause
425c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
426c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
427c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[5]' lvalue Var{{.*}} 'array' 'int[5]'
428c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
429c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
430c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
431c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
432c1298878SErich Keane // CHECK-NEXT: WhileStmt
433c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
434c1298878SErich Keane // CHECK-NEXT: NullStmt
435c1298878SErich Keane
436c1298878SErich Keane //#pragma acc parallel private(VLA[:I])
437c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
438c1298878SErich Keane // CHECK-NEXT: private clause
439c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
440c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
441c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'
442c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
443c1298878SErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'
444c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I
445c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3
446c1298878SErich Keane // CHECK-NEXT: WhileStmt
447c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
448c1298878SErich Keane // CHECK-NEXT: NullStmt
449c1298878SErich Keane
450c1298878SErich Keane //#pragma acc parallel private(VLA[returns_3():I])
451c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
452c1298878SErich Keane // CHECK-NEXT: private clause
453c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
454c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
455c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'
456c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}}'int'
457c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
458c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
459c1298878SErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'
460c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I
461c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3
462c1298878SErich Keane // CHECK-NEXT: WhileStmt
463c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
464c1298878SErich Keane // CHECK-NEXT: NullStmt
465c1298878SErich Keane
466c1298878SErich Keane //#pragma acc parallel private(VLA[i:i])
467c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
468c1298878SErich Keane // CHECK-NEXT: private clause
469c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
470c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay>
471c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int[i]' lvalue Var{{.*}} 'VLA' 'int[i]'
472c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
473c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
474c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
475c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
476c1298878SErich Keane // CHECK-NEXT: WhileStmt
477c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
478c1298878SErich Keane // CHECK-NEXT: NullStmt
479c1298878SErich Keane
480c1298878SErich Keane //#pragma acc parallel private(ptr[:I])
481c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
482c1298878SErich Keane // CHECK-NEXT: private clause
483c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
484c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>
485c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'
486c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
487c1298878SErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'
488c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I
489c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3
490c1298878SErich Keane // CHECK-NEXT: WhileStmt
491c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
492c1298878SErich Keane // CHECK-NEXT: NullStmt
493c1298878SErich Keane
494c1298878SErich Keane //#pragma acc parallel private(ptr[returns_3():I])
495c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
496c1298878SErich Keane // CHECK-NEXT: private clause
497c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
498c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>
499c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'
500c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}} 'int'
501c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
502c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
503c1298878SErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'
504c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I
505c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3
506c1298878SErich Keane // CHECK-NEXT: WhileStmt
507c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
508c1298878SErich Keane // CHECK-NEXT: NullStmt
509c1298878SErich Keane
510c1298878SErich Keane //#pragma acc parallel private(ptr[i:i])
511c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
512c1298878SErich Keane // CHECK-NEXT: private clause
513c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
514c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>
515c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue Var{{.*}} 'ptr' 'int *'
516c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
517c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
518c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>
519c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'
520c1298878SErich Keane // CHECK-NEXT: WhileStmt
521c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
522c1298878SErich Keane // CHECK-NEXT: NullStmt
523c1298878SErich Keane
524c1298878SErich Keane //#pragma acc parallel private(CEArray[returns_3() - 2: I])
525c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
526c1298878SErich Keane // CHECK-NEXT: private clause
527c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
528c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'const int *' <ArrayToPointerDecay>
529c1298878SErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'const int[5]' lvalue
530c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'auto &' depth 0 index 2 CEArray
531c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'const int[5]' lvalue Var{{.*}}'CEArray' 'const int[5]'
532c1298878SErich Keane // CHECK-NEXT: BinaryOperator{{.*}} 'int' '-'
533c1298878SErich Keane // CHECK-NEXT: CallExpr{{.*}} 'int'
534c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int (*)()' <FunctionToPointerDecay>
535c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'int ()' lvalue Function{{.*}} 'returns_3' 'int ()'
536c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 2
537c1298878SErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'
538c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I
539c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3
540c1298878SErich Keane // CHECK-NEXT: WhileStmt
541c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
542c1298878SErich Keane // CHECK-NEXT: NullStmt
543c1298878SErich Keane
544c1298878SErich Keane //#pragma acc parallel private(CEArray[: I])
545c1298878SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel
546c1298878SErich Keane // CHECK-NEXT: private clause
547c1298878SErich Keane // CHECK-NEXT: ArraySectionExpr
548c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'const int *' <ArrayToPointerDecay>
549c1298878SErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'const int[5]' lvalue
550c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'auto &' depth 0 index 2 CEArray
551c1298878SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'const int[5]' lvalue Var{{.*}}'CEArray' 'const int[5]'
552c1298878SErich Keane // CHECK-NEXT: <<<NULL>>>
553c1298878SErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'
554c1298878SErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 I
555c1298878SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3
556c1298878SErich Keane // CHECK-NEXT: WhileStmt
557c1298878SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr
558c1298878SErich Keane // CHECK-NEXT: NullStmt
559c1298878SErich Keane }
560c1298878SErich Keane
561c1298878SErich Keane // CHECK-NEXT: FunctionDecl{{.*}}inst
inst()562c1298878SErich Keane void inst() {
563c1298878SErich Keane static constexpr int CEArray[5]={1,2,3,4,5};
564c1298878SErich Keane Templ<int, 3, CEArray>(5);
565c1298878SErich Keane }
566c1298878SErich Keane #endif
567