@@ -18,8 +18,10 @@ void NormalFunc() {
18
18
// CHECK-LABEL: NormalFunc
19
19
// CHECK-NEXT: CompoundStmt
20
20
21
- #pragma acc update if_present if (some_int() < some_long())
21
+ #pragma acc update self(Global) if_present if (some_int() < some_long())
22
22
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
23
+ // CHECK-NEXT: self clause
24
+ // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
23
25
// CHECK-NEXT: if_present clause
24
26
// CHECK-NEXT: if clause
25
27
// CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'
@@ -31,15 +33,19 @@ void NormalFunc() {
31
33
// CHECK-NEXT: ImplicitCastExpr
32
34
// CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'
33
35
34
- #pragma acc update wait async device_type(A) dtype(B)
36
+ #pragma acc update self(Global) wait async device_type(A) dtype(B)
35
37
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
38
+ // CHECK-NEXT: self clause
39
+ // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
36
40
// CHECK-NEXT: wait clause
37
41
// CHECK-NEXT: <<<NULL>>>
38
42
// CHECK-NEXT: async clause
39
43
// CHECK-NEXT: device_type(A)
40
44
// CHECK-NEXT: dtype(B)
41
- #pragma acc update wait(some_int(), some_long()) async(some_int())
45
+ #pragma acc update self(Global) wait(some_int(), some_long()) async(some_int())
42
46
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
47
+ // CHECK-NEXT: self clause
48
+ // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
43
49
// CHECK-NEXT: wait clause
44
50
// CHECK-NEXT: <<<NULL>>>
45
51
// CHECK-NEXT: CallExpr{{.*}}'int'
@@ -52,8 +58,10 @@ void NormalFunc() {
52
58
// CHECK-NEXT: CallExpr{{.*}}'int'
53
59
// CHECK-NEXT: ImplicitCastExpr
54
60
// CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'
55
- #pragma acc update wait(queues:some_int(), some_long())
61
+ #pragma acc update self(Global) wait(queues:some_int(), some_long())
56
62
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
63
+ // CHECK-NEXT: self clause
64
+ // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
57
65
// CHECK-NEXT: wait clause
58
66
// CHECK-NEXT: <<<NULL>>>
59
67
// CHECK-NEXT: CallExpr{{.*}}'int'
@@ -62,8 +70,10 @@ void NormalFunc() {
62
70
// CHECK-NEXT: CallExpr{{.*}}'long'
63
71
// CHECK-NEXT: ImplicitCastExpr
64
72
// CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'
65
- #pragma acc update wait(devnum: some_int() :some_int(), some_long())
73
+ #pragma acc update self(Global) wait(devnum: some_int() :some_int(), some_long())
66
74
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
75
+ // CHECK-NEXT: self clause
76
+ // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
67
77
// CHECK-NEXT: wait clause
68
78
// CHECK-NEXT: CallExpr{{.*}}'int'
69
79
// CHECK-NEXT: ImplicitCastExpr
@@ -83,12 +93,12 @@ void NormalFunc() {
83
93
// CHECK-NEXT: ArraySubscriptExpr{{.*}} 'short' lvalue
84
94
// CHECK-NEXT: ImplicitCastExpr
85
95
// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
86
- // CHECK-NEXT: IntegerLiteral{{.*}} 0
96
+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
87
97
// CHECK-NEXT: ArraySectionExpr
88
98
// CHECK-NEXT: ImplicitCastExpr
89
99
// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
90
- // CHECK-NEXT: IntegerLiteral{{.*}} 0
91
- // CHECK-NEXT: IntegerLiteral{{.*}} 1
100
+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
101
+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1
92
102
93
103
#pragma acc update host(Global, GlobalArray, GlobalArray[0], GlobalArray[0:1]) device(Global, GlobalArray, GlobalArray[0], GlobalArray[0:1])
94
104
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
@@ -98,24 +108,24 @@ void NormalFunc() {
98
108
// CHECK-NEXT: ArraySubscriptExpr{{.*}} 'short' lvalue
99
109
// CHECK-NEXT: ImplicitCastExpr
100
110
// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
101
- // CHECK-NEXT: IntegerLiteral{{.*}} 0
111
+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
102
112
// CHECK-NEXT: ArraySectionExpr
103
113
// CHECK-NEXT: ImplicitCastExpr
104
114
// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
105
- // CHECK-NEXT: IntegerLiteral{{.*}} 0
106
- // CHECK-NEXT: IntegerLiteral{{.*}} 1
115
+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
116
+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1
107
117
// CHECK-NEXT: device clause
108
118
// CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
109
119
// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
110
120
// CHECK-NEXT: ArraySubscriptExpr{{.*}} 'short' lvalue
111
121
// CHECK-NEXT: ImplicitCastExpr
112
122
// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
113
- // CHECK-NEXT: IntegerLiteral{{.*}} 0
123
+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
114
124
// CHECK-NEXT: ArraySectionExpr
115
125
// CHECK-NEXT: ImplicitCastExpr
116
126
// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
117
- // CHECK-NEXT: IntegerLiteral{{.*}} 0
118
- // CHECK-NEXT: IntegerLiteral{{.*}} 1
127
+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
128
+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1
119
129
}
120
130
121
131
template <typename T>
@@ -126,24 +136,30 @@ void TemplFunc(T t) {
126
136
// CHECK-NEXT: ParmVarDecl{{.*}} t 'T'
127
137
// CHECK-NEXT: CompoundStmt
128
138
129
- #pragma acc update if_present if (T::value < t)
139
+ #pragma acc update self(t) if_present if (T::value < t)
130
140
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
141
+ // CHECK-NEXT: self clause
142
+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
131
143
// CHECK-NEXT: if_present clause
132
144
// CHECK-NEXT: if clause
133
145
// CHECK-NEXT: BinaryOperator{{.*}}'<dependent type>' '<'
134
146
// CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'
135
147
// CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
136
148
// CHECK-NEXT: DeclRefExpr{{.*}}'t' 'T'
137
149
138
- #pragma acc update wait async device_type(T) dtype(U)
150
+ #pragma acc update self(t) wait async device_type(T) dtype(U)
139
151
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
152
+ // CHECK-NEXT: self clause
153
+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
140
154
// CHECK-NEXT: wait clause
141
155
// CHECK-NEXT: <<<NULL>>>
142
156
// CHECK-NEXT: async clause
143
157
// CHECK-NEXT: device_type(T)
144
158
// CHECK-NEXT: dtype(U)
145
- #pragma acc update wait(T::value, t) async(T::value)
159
+ #pragma acc update self(t) wait(T::value, t) async(T::value)
146
160
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
161
+ // CHECK-NEXT: self clause
162
+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
147
163
// CHECK-NEXT: wait clause
148
164
// CHECK-NEXT: <<<NULL>>>
149
165
// CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
@@ -152,17 +168,21 @@ void TemplFunc(T t) {
152
168
// CHECK-NEXT: async clause
153
169
// CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
154
170
// CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
155
- #pragma acc update wait(queues:T::value, t) async(t)
171
+ #pragma acc update self(t) wait(queues:T::value, t) async(t)
156
172
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
173
+ // CHECK-NEXT: self clause
174
+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
157
175
// CHECK-NEXT: wait clause
158
176
// CHECK-NEXT: <<<NULL>>>
159
177
// CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
160
178
// CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
161
179
// CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
162
180
// CHECK-NEXT: async clause
163
181
// CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
164
- #pragma acc update wait(devnum: T::value:t, T::value)
182
+ #pragma acc update self(t) wait(devnum: T::value:t, T::value)
165
183
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
184
+ // CHECK-NEXT: self clause
185
+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
166
186
// CHECK-NEXT: wait clause
167
187
// CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
168
188
// CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
@@ -184,11 +204,11 @@ void TemplFunc(T t) {
184
204
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
185
205
// CHECK-NEXT: ArraySubscriptExpr
186
206
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
187
- // CHECK-NEXT: IntegerLiteral{{.*}}0
207
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
188
208
// CHECK-NEXT: ArraySectionExpr
189
209
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
190
- // CHECK-NEXT: IntegerLiteral{{.*}}0
191
- // CHECK-NEXT: IntegerLiteral{{.*}}1
210
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
211
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1
192
212
193
213
#pragma acc update host(Local, LocalArray, LocalArray[0], LocalArray[0:1]) device(Local, LocalArray, LocalArray[0], LocalArray[0:1])
194
214
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
@@ -197,21 +217,21 @@ void TemplFunc(T t) {
197
217
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
198
218
// CHECK-NEXT: ArraySubscriptExpr
199
219
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
200
- // CHECK-NEXT: IntegerLiteral{{.*}}0
220
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
201
221
// CHECK-NEXT: ArraySectionExpr
202
222
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
203
- // CHECK-NEXT: IntegerLiteral{{.*}}0
204
- // CHECK-NEXT: IntegerLiteral{{.*}}1
223
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
224
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1
205
225
// CHECK-NEXT: device clause
206
226
// CHECK-NEXT: DeclRefExpr{{.*}} 'Local' 'decltype(T::value)'
207
227
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
208
228
// CHECK-NEXT: ArraySubscriptExpr
209
229
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
210
- // CHECK-NEXT: IntegerLiteral{{.*}}0
230
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
211
231
// CHECK-NEXT: ArraySectionExpr
212
232
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
213
- // CHECK-NEXT: IntegerLiteral{{.*}}0
214
- // CHECK-NEXT: IntegerLiteral{{.*}}1
233
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
234
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1
215
235
216
236
// Instantiation:
217
237
// CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void (SomeStruct)' implicit_instantiation
@@ -222,6 +242,8 @@ void TemplFunc(T t) {
222
242
// CHECK-NEXT: CompoundStmt
223
243
224
244
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
245
+ // CHECK-NEXT: self clause
246
+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
225
247
// CHECK-NEXT: if_present clause
226
248
// CHECK-NEXT: if clause
227
249
// CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'
@@ -234,13 +256,17 @@ void TemplFunc(T t) {
234
256
// CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'
235
257
236
258
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
259
+ // CHECK-NEXT: self clause
260
+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
237
261
// CHECK-NEXT: wait clause
238
262
// CHECK-NEXT: <<<NULL>>>
239
263
// CHECK-NEXT: async clause
240
264
// CHECK-NEXT: device_type(T)
241
265
// CHECK-NEXT: dtype(U)
242
266
243
267
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
268
+ // CHECK-NEXT: self clause
269
+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
244
270
// CHECK-NEXT: wait clause
245
271
// CHECK-NEXT: <<<NULL>>>
246
272
// CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
@@ -256,6 +282,8 @@ void TemplFunc(T t) {
256
282
// CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'
257
283
258
284
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
285
+ // CHECK-NEXT: self clause
286
+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
259
287
// CHECK-NEXT: wait clause
260
288
// CHECK-NEXT: <<<NULL>>>
261
289
// CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
@@ -272,6 +300,8 @@ void TemplFunc(T t) {
272
300
// CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'
273
301
274
302
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
303
+ // CHECK-NEXT: self clause
304
+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
275
305
// CHECK-NEXT: wait clause
276
306
// CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
277
307
// CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'
@@ -299,12 +329,12 @@ void TemplFunc(T t) {
299
329
// CHECK-NEXT: ArraySubscriptExpr
300
330
// CHECK-NEXT: ImplicitCastExpr
301
331
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
302
- // CHECK-NEXT: IntegerLiteral{{.*}}0
332
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
303
333
// CHECK-NEXT: ArraySectionExpr
304
334
// CHECK-NEXT: ImplicitCastExpr
305
335
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
306
- // CHECK-NEXT: IntegerLiteral{{.*}}0
307
- // CHECK-NEXT: IntegerLiteral{{.*}}1
336
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
337
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1
308
338
309
339
// CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
310
340
// CHECK-NEXT: host clause
@@ -313,24 +343,24 @@ void TemplFunc(T t) {
313
343
// CHECK-NEXT: ArraySubscriptExpr
314
344
// CHECK-NEXT: ImplicitCastExpr
315
345
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
316
- // CHECK-NEXT: IntegerLiteral{{.*}}0
346
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
317
347
// CHECK-NEXT: ArraySectionExpr
318
348
// CHECK-NEXT: ImplicitCastExpr
319
349
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
320
- // CHECK-NEXT: IntegerLiteral{{.*}}0
321
- // CHECK-NEXT: IntegerLiteral{{.*}}1
350
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
351
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1
322
352
// CHECK-NEXT: device clause
323
353
// CHECK-NEXT: DeclRefExpr{{.*}} 'Local' 'decltype(SomeStruct::value)':'const unsigned int'
324
354
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
325
355
// CHECK-NEXT: ArraySubscriptExpr
326
356
// CHECK-NEXT: ImplicitCastExpr
327
357
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
328
- // CHECK-NEXT: IntegerLiteral{{.*}}0
358
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
329
359
// CHECK-NEXT: ArraySectionExpr
330
360
// CHECK-NEXT: ImplicitCastExpr
331
361
// CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
332
- // CHECK-NEXT: IntegerLiteral{{.*}}0
333
- // CHECK-NEXT: IntegerLiteral{{.*}}1
362
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
363
+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1
334
364
}
335
365
336
366
struct SomeStruct {
0 commit comments