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