1 // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s
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
11 constexpr operator auto() {return 1;}
15 // CHECK: FunctionDecl{{.*}}NormalUses
16 // CHECK-NEXT: CompoundStmt
18 #pragma acc parallel loop tile(S{}, 1, 2, *)
19 for(int i
= 0;i
< 5;++i
)
20 for(int j
= 0;j
< 5;++j
)
21 for(int k
= 0;k
< 5;++k
)
22 for(int l
= 0;l
< 5;++l
);
23 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop
24 // CHECK-NEXT: tile clause
25 // CHECK-NEXT: ConstantExpr{{.*}} 'int'
26 // CHECK-NEXT: value: Int 1
27 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>
28 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'
29 // CHECK-NEXT: MemberExpr{{.*}} .operator auto
30 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue
31 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list
32 // CHECK-NEXT: ConstantExpr{{.*}} 'int'
33 // CHECK-NEXT: value: Int 1
34 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1
35 // CHECK-NEXT: ConstantExpr{{.*}} 'int'
36 // CHECK-NEXT: value: Int 2
37 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 2
38 // CHECK-NEXT: OpenACCAsteriskSizeExpr{{.*}}'int'
39 // CHECK-NEXT: ForStmt
40 // CHECK-NEXT: DeclStmt
41 // CHECK-NEXT: VarDecl{{.*}} i 'int'
42 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
43 // CHECK-NEXT: <<<NULL>>>
44 // CHECK-NEXT: BinaryOperator{{.*}}'<'
45 // CHECK-NEXT: ImplicitCastExpr
46 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
47 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
48 // CHECK-NEXT: UnaryOperator{{.*}}++
49 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
50 // CHECK-NEXT: ForStmt
51 // CHECK-NEXT: DeclStmt
52 // CHECK-NEXT: VarDecl{{.*}} j 'int'
53 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
54 // CHECK-NEXT: <<<NULL>>>
55 // CHECK-NEXT: BinaryOperator{{.*}}'<'
56 // CHECK-NEXT: ImplicitCastExpr
57 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'
58 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
59 // CHECK-NEXT: UnaryOperator{{.*}}++
60 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'
61 // CHECK-NEXT: ForStmt
62 // CHECK-NEXT: DeclStmt
63 // CHECK-NEXT: VarDecl{{.*}} k 'int'
64 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
65 // CHECK-NEXT: <<<NULL>>>
66 // CHECK-NEXT: BinaryOperator{{.*}}'<'
67 // CHECK-NEXT: ImplicitCastExpr
68 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'
69 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
70 // CHECK-NEXT: UnaryOperator{{.*}}++
71 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'
72 // CHECK-NEXT: ForStmt
73 // CHECK-NEXT: DeclStmt
74 // CHECK-NEXT: VarDecl{{.*}} l 'int'
75 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
76 // CHECK-NEXT: <<<NULL>>>
77 // CHECK-NEXT: BinaryOperator{{.*}}'<'
78 // CHECK-NEXT: ImplicitCastExpr
79 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'
80 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
81 // CHECK-NEXT: UnaryOperator{{.*}}++
82 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'
83 // CHECK-NEXT: NullStmt
86 template<typename T
, unsigned Value
>
88 // CHECK: FunctionTemplateDecl{{.*}}TemplUses
89 // CHECK-NEXT: TemplateTypeParmDecl {{.*}} referenced typename depth 0 index 0 T
90 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'unsigned int' depth 0 index 1 Value
91 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void ()'
92 // CHECK-NEXT: CompoundStmt
94 #pragma acc serial loop tile(S{}, T{}, *, T{} + S{}, Value, Value + 3)
95 for(int i
= 0;i
< 5;++i
)
96 for(int j
= 0;j
< 5;++j
)
97 for(int k
= 0;k
< 5;++k
)
98 for(int l
= 0;l
< 5;++l
)
99 for(int m
= 0;m
< 5;++m
)
100 for(int n
= 0;n
< 5;++n
);
101 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop
102 // CHECK-NEXT: tile clause
104 // CHECK-NEXT: ConstantExpr{{.*}} 'int'
105 // CHECK-NEXT: value: Int 1
106 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>
107 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'
108 // CHECK-NEXT: MemberExpr{{.*}} .operator auto
109 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue
110 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list
112 // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list
113 // CHECK-NEXT: InitListExpr{{.*}}'void'
115 // CHECK-NEXT: OpenACCAsteriskSizeExpr{{.*}}'int'
117 // CHECK-NEXT: BinaryOperator{{.*}}'<dependent type>' '+'
118 // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list
119 // CHECK-NEXT: InitListExpr{{.*}}'void'
120 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list
122 // CHECK-NEXT: DeclRefExpr{{.*}}'unsigned int' NonTypeTemplateParm{{.*}}'Value' 'unsigned int'
124 // CHECK-NEXT: BinaryOperator{{.*}}'unsigned int' '+'
125 // CHECK-NEXT: DeclRefExpr{{.*}}'unsigned int' NonTypeTemplateParm{{.*}}'Value' 'unsigned int'
126 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'unsigned int' <IntegralCast>
127 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 3
128 // CHECK-NEXT: ForStmt
129 // CHECK-NEXT: DeclStmt
130 // CHECK-NEXT: VarDecl{{.*}} i 'int'
131 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
132 // CHECK-NEXT: <<<NULL>>>
133 // CHECK-NEXT: BinaryOperator{{.*}}'<'
134 // CHECK-NEXT: ImplicitCastExpr
135 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
136 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
137 // CHECK-NEXT: UnaryOperator{{.*}}++
138 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
139 // CHECK-NEXT: ForStmt
140 // CHECK-NEXT: DeclStmt
141 // CHECK-NEXT: VarDecl{{.*}} j 'int'
142 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
143 // CHECK-NEXT: <<<NULL>>>
144 // CHECK-NEXT: BinaryOperator{{.*}}'<'
145 // CHECK-NEXT: ImplicitCastExpr
146 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'
147 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
148 // CHECK-NEXT: UnaryOperator{{.*}}++
149 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'
150 // CHECK-NEXT: ForStmt
151 // CHECK-NEXT: DeclStmt
152 // CHECK-NEXT: VarDecl{{.*}} k 'int'
153 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
154 // CHECK-NEXT: <<<NULL>>>
155 // CHECK-NEXT: BinaryOperator{{.*}}'<'
156 // CHECK-NEXT: ImplicitCastExpr
157 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'
158 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
159 // CHECK-NEXT: UnaryOperator{{.*}}++
160 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'
161 // CHECK-NEXT: ForStmt
162 // CHECK-NEXT: DeclStmt
163 // CHECK-NEXT: VarDecl{{.*}} l 'int'
164 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
165 // CHECK-NEXT: <<<NULL>>>
166 // CHECK-NEXT: BinaryOperator{{.*}}'<'
167 // CHECK-NEXT: ImplicitCastExpr
168 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'
169 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
170 // CHECK-NEXT: UnaryOperator{{.*}}++
171 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'
172 // CHECK-NEXT: ForStmt
173 // CHECK-NEXT: DeclStmt
174 // CHECK-NEXT: VarDecl{{.*}} m 'int'
175 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
176 // CHECK-NEXT: <<<NULL>>>
177 // CHECK-NEXT: BinaryOperator{{.*}}'<'
178 // CHECK-NEXT: ImplicitCastExpr
179 // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'
180 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
181 // CHECK-NEXT: UnaryOperator{{.*}}++
182 // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'
183 // CHECK-NEXT: ForStmt
184 // CHECK-NEXT: DeclStmt
185 // CHECK-NEXT: VarDecl{{.*}} n 'int'
186 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
187 // CHECK-NEXT: <<<NULL>>>
188 // CHECK-NEXT: BinaryOperator{{.*}}'<'
189 // CHECK-NEXT: ImplicitCastExpr
190 // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'
191 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
192 // CHECK-NEXT: UnaryOperator{{.*}}++
193 // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'
194 // CHECK-NEXT: NullStmt
197 // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void ()' implicit_instantiation
198 // CHECK-NEXT: TemplateArgument type 'S'
199 // CHECK-NEXT: RecordType{{.*}} 'S'
200 // CHECK-NEXT: CXXRecord{{.*}} 'S'
201 // CHECK-NEXT: TemplateArgument integral '2U'
202 // CHECK-NEXT: CompoundStmt
204 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop
205 // CHECK-NEXT: tile clause
207 // CHECK-NEXT: ConstantExpr{{.*}} 'int'
208 // CHECK-NEXT: value: Int 1
209 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>
210 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'
211 // CHECK-NEXT: MemberExpr{{.*}} .operator auto
212 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue
213 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list
215 // CHECK-NEXT: ConstantExpr{{.*}} 'int'
216 // CHECK-NEXT: value: Int 1
217 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>
218 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'
219 // CHECK-NEXT: MemberExpr{{.*}} .operator auto
220 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue
221 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list
223 // CHECK-NEXT: OpenACCAsteriskSizeExpr{{.*}}'int'
225 // CHECK-NEXT: ConstantExpr{{.*}} 'int'
226 // CHECK-NEXT: value: Int 2
227 // CHECK-NEXT: BinaryOperator{{.*}}'int' '+'
228 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>
229 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'
230 // CHECK-NEXT: MemberExpr{{.*}} .operator auto
231 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue
232 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list
233 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>
234 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'
235 // CHECK-NEXT: MemberExpr{{.*}} .operator auto
236 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue
237 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list
239 // CHECK-NEXT: ConstantExpr{{.*}} 'unsigned int'
240 // CHECK-NEXT: value: Int 2
241 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'
242 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 Value
243 // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 2
245 // CHECK-NEXT: ConstantExpr{{.*}} 'unsigned int'
246 // CHECK-NEXT: value: Int 5
247 // CHECK-NEXT: BinaryOperator{{.*}}'unsigned int' '+'
248 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'
249 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 Value
250 // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 2
251 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'unsigned int' <IntegralCast>
252 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 3
254 // CHECK-NEXT: ForStmt
255 // CHECK-NEXT: DeclStmt
256 // CHECK-NEXT: VarDecl{{.*}} i 'int'
257 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
258 // CHECK-NEXT: <<<NULL>>>
259 // CHECK-NEXT: BinaryOperator{{.*}}'<'
260 // CHECK-NEXT: ImplicitCastExpr
261 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
262 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
263 // CHECK-NEXT: UnaryOperator{{.*}}++
264 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
265 // CHECK-NEXT: ForStmt
266 // CHECK-NEXT: DeclStmt
267 // CHECK-NEXT: VarDecl{{.*}} j 'int'
268 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
269 // CHECK-NEXT: <<<NULL>>>
270 // CHECK-NEXT: BinaryOperator{{.*}}'<'
271 // CHECK-NEXT: ImplicitCastExpr
272 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'
273 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
274 // CHECK-NEXT: UnaryOperator{{.*}}++
275 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'
276 // CHECK-NEXT: ForStmt
277 // CHECK-NEXT: DeclStmt
278 // CHECK-NEXT: VarDecl{{.*}} k 'int'
279 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
280 // CHECK-NEXT: <<<NULL>>>
281 // CHECK-NEXT: BinaryOperator{{.*}}'<'
282 // CHECK-NEXT: ImplicitCastExpr
283 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'
284 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
285 // CHECK-NEXT: UnaryOperator{{.*}}++
286 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'
287 // CHECK-NEXT: ForStmt
288 // CHECK-NEXT: DeclStmt
289 // CHECK-NEXT: VarDecl{{.*}} l 'int'
290 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
291 // CHECK-NEXT: <<<NULL>>>
292 // CHECK-NEXT: BinaryOperator{{.*}}'<'
293 // CHECK-NEXT: ImplicitCastExpr
294 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'
295 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
296 // CHECK-NEXT: UnaryOperator{{.*}}++
297 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'
298 // CHECK-NEXT: ForStmt
299 // CHECK-NEXT: DeclStmt
300 // CHECK-NEXT: VarDecl{{.*}} m 'int'
301 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
302 // CHECK-NEXT: <<<NULL>>>
303 // CHECK-NEXT: BinaryOperator{{.*}}'<'
304 // CHECK-NEXT: ImplicitCastExpr
305 // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'
306 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
307 // CHECK-NEXT: UnaryOperator{{.*}}++
308 // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'
309 // CHECK-NEXT: ForStmt
310 // CHECK-NEXT: DeclStmt
311 // CHECK-NEXT: VarDecl{{.*}} n 'int'
312 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
313 // CHECK-NEXT: <<<NULL>>>
314 // CHECK-NEXT: BinaryOperator{{.*}}'<'
315 // CHECK-NEXT: ImplicitCastExpr
316 // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'
317 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
318 // CHECK-NEXT: UnaryOperator{{.*}}++
319 // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'
320 // CHECK-NEXT: NullStmt