@@ -18,8 +18,10 @@ void NormalFunc() {
1818 // CHECK-LABEL: NormalFunc
1919 // CHECK-NEXT: CompoundStmt
2020
21- #pragma acc update if_present if (some_int() < some_long())
21+ #pragma acc update self(Global) if_present if (some_int() < some_long())
2222 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
23+ // CHECK-NEXT: self clause
24+ // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
2325 // CHECK-NEXT: if_present clause
2426 // CHECK-NEXT: if clause
2527 // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'
@@ -31,15 +33,19 @@ void NormalFunc() {
3133 // CHECK-NEXT: ImplicitCastExpr
3234 // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'
3335
34- #pragma acc update wait async device_type(A) dtype(B)
36+ #pragma acc update self(Global) wait async device_type(A) dtype(B)
3537 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
38+ // CHECK-NEXT: self clause
39+ // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
3640 // CHECK-NEXT: wait clause
3741 // CHECK-NEXT: <<<NULL>>>
3842 // CHECK-NEXT: async clause
3943 // CHECK-NEXT: device_type(A)
4044 // 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())
4246 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
47+ // CHECK-NEXT: self clause
48+ // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
4349 // CHECK-NEXT: wait clause
4450 // CHECK-NEXT: <<<NULL>>>
4551 // CHECK-NEXT: CallExpr{{.*}}'int'
@@ -52,8 +58,10 @@ void NormalFunc() {
5258 // CHECK-NEXT: CallExpr{{.*}}'int'
5359 // CHECK-NEXT: ImplicitCastExpr
5460 // 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())
5662 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
63+ // CHECK-NEXT: self clause
64+ // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
5765 // CHECK-NEXT: wait clause
5866 // CHECK-NEXT: <<<NULL>>>
5967 // CHECK-NEXT: CallExpr{{.*}}'int'
@@ -62,8 +70,10 @@ void NormalFunc() {
6270 // CHECK-NEXT: CallExpr{{.*}}'long'
6371 // CHECK-NEXT: ImplicitCastExpr
6472 // 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())
6674 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
75+ // CHECK-NEXT: self clause
76+ // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
6777 // CHECK-NEXT: wait clause
6878 // CHECK-NEXT: CallExpr{{.*}}'int'
6979 // CHECK-NEXT: ImplicitCastExpr
@@ -83,12 +93,12 @@ void NormalFunc() {
8393 // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'short' lvalue
8494 // CHECK-NEXT: ImplicitCastExpr
8595 // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
86- // CHECK-NEXT: IntegerLiteral{{.*}} 0
96+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
8797 // CHECK-NEXT: ArraySectionExpr
8898 // CHECK-NEXT: ImplicitCastExpr
8999 // 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
92102
93103#pragma acc update host(Global, GlobalArray, GlobalArray[0], GlobalArray[0:1]) device(Global, GlobalArray, GlobalArray[0], GlobalArray[0:1])
94104 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
@@ -98,24 +108,24 @@ void NormalFunc() {
98108 // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'short' lvalue
99109 // CHECK-NEXT: ImplicitCastExpr
100110 // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
101- // CHECK-NEXT: IntegerLiteral{{.*}} 0
111+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
102112 // CHECK-NEXT: ArraySectionExpr
103113 // CHECK-NEXT: ImplicitCastExpr
104114 // 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
107117 // CHECK-NEXT: device clause
108118 // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'
109119 // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
110120 // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'short' lvalue
111121 // CHECK-NEXT: ImplicitCastExpr
112122 // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'
113- // CHECK-NEXT: IntegerLiteral{{.*}} 0
123+ // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
114124 // CHECK-NEXT: ArraySectionExpr
115125 // CHECK-NEXT: ImplicitCastExpr
116126 // 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
119129}
120130
121131template <typename T>
@@ -126,24 +136,30 @@ void TemplFunc(T t) {
126136 // CHECK-NEXT: ParmVarDecl{{.*}} t 'T'
127137 // CHECK-NEXT: CompoundStmt
128138
129- #pragma acc update if_present if (T::value < t)
139+ #pragma acc update self(t) if_present if (T::value < t)
130140 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
141+ // CHECK-NEXT: self clause
142+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
131143 // CHECK-NEXT: if_present clause
132144 // CHECK-NEXT: if clause
133145 // CHECK-NEXT: BinaryOperator{{.*}}'<dependent type>' '<'
134146 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'
135147 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
136148 // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'T'
137149
138- #pragma acc update wait async device_type(T) dtype(U)
150+ #pragma acc update self(t) wait async device_type(T) dtype(U)
139151 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
152+ // CHECK-NEXT: self clause
153+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
140154 // CHECK-NEXT: wait clause
141155 // CHECK-NEXT: <<<NULL>>>
142156 // CHECK-NEXT: async clause
143157 // CHECK-NEXT: device_type(T)
144158 // 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)
146160 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
161+ // CHECK-NEXT: self clause
162+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
147163 // CHECK-NEXT: wait clause
148164 // CHECK-NEXT: <<<NULL>>>
149165 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
@@ -152,17 +168,21 @@ void TemplFunc(T t) {
152168 // CHECK-NEXT: async clause
153169 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
154170 // 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)
156172 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
173+ // CHECK-NEXT: self clause
174+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
157175 // CHECK-NEXT: wait clause
158176 // CHECK-NEXT: <<<NULL>>>
159177 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
160178 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
161179 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
162180 // CHECK-NEXT: async clause
163181 // 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)
165183 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
184+ // CHECK-NEXT: self clause
185+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
166186 // CHECK-NEXT: wait clause
167187 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
168188 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
@@ -184,11 +204,11 @@ void TemplFunc(T t) {
184204 // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
185205 // CHECK-NEXT: ArraySubscriptExpr
186206 // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
187- // CHECK-NEXT: IntegerLiteral{{.*}}0
207+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
188208 // CHECK-NEXT: ArraySectionExpr
189209 // 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
192212
193213#pragma acc update host(Local, LocalArray, LocalArray[0], LocalArray[0:1]) device(Local, LocalArray, LocalArray[0], LocalArray[0:1])
194214 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
@@ -197,21 +217,21 @@ void TemplFunc(T t) {
197217 // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
198218 // CHECK-NEXT: ArraySubscriptExpr
199219 // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
200- // CHECK-NEXT: IntegerLiteral{{.*}}0
220+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
201221 // CHECK-NEXT: ArraySectionExpr
202222 // 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
205225 // CHECK-NEXT: device clause
206226 // CHECK-NEXT: DeclRefExpr{{.*}} 'Local' 'decltype(T::value)'
207227 // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
208228 // CHECK-NEXT: ArraySubscriptExpr
209229 // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'
210- // CHECK-NEXT: IntegerLiteral{{.*}}0
230+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
211231 // CHECK-NEXT: ArraySectionExpr
212232 // 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
215235
216236 // Instantiation:
217237 // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void (SomeStruct)' implicit_instantiation
@@ -222,6 +242,8 @@ void TemplFunc(T t) {
222242 // CHECK-NEXT: CompoundStmt
223243
224244 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
245+ // CHECK-NEXT: self clause
246+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
225247 // CHECK-NEXT: if_present clause
226248 // CHECK-NEXT: if clause
227249 // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'
@@ -234,13 +256,17 @@ void TemplFunc(T t) {
234256 // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'
235257
236258 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
259+ // CHECK-NEXT: self clause
260+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
237261 // CHECK-NEXT: wait clause
238262 // CHECK-NEXT: <<<NULL>>>
239263 // CHECK-NEXT: async clause
240264 // CHECK-NEXT: device_type(T)
241265 // CHECK-NEXT: dtype(U)
242266
243267 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
268+ // CHECK-NEXT: self clause
269+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
244270 // CHECK-NEXT: wait clause
245271 // CHECK-NEXT: <<<NULL>>>
246272 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
@@ -256,6 +282,8 @@ void TemplFunc(T t) {
256282 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'
257283
258284 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
285+ // CHECK-NEXT: self clause
286+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
259287 // CHECK-NEXT: wait clause
260288 // CHECK-NEXT: <<<NULL>>>
261289 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
@@ -272,6 +300,8 @@ void TemplFunc(T t) {
272300 // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'
273301
274302 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
303+ // CHECK-NEXT: self clause
304+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
275305 // CHECK-NEXT: wait clause
276306 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
277307 // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'
@@ -299,12 +329,12 @@ void TemplFunc(T t) {
299329 // CHECK-NEXT: ArraySubscriptExpr
300330 // CHECK-NEXT: ImplicitCastExpr
301331 // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
302- // CHECK-NEXT: IntegerLiteral{{.*}}0
332+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
303333 // CHECK-NEXT: ArraySectionExpr
304334 // CHECK-NEXT: ImplicitCastExpr
305335 // 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
308338
309339 // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
310340 // CHECK-NEXT: host clause
@@ -313,24 +343,24 @@ void TemplFunc(T t) {
313343 // CHECK-NEXT: ArraySubscriptExpr
314344 // CHECK-NEXT: ImplicitCastExpr
315345 // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
316- // CHECK-NEXT: IntegerLiteral{{.*}}0
346+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
317347 // CHECK-NEXT: ArraySectionExpr
318348 // CHECK-NEXT: ImplicitCastExpr
319349 // 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
322352 // CHECK-NEXT: device clause
323353 // CHECK-NEXT: DeclRefExpr{{.*}} 'Local' 'decltype(SomeStruct::value)':'const unsigned int'
324354 // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
325355 // CHECK-NEXT: ArraySubscriptExpr
326356 // CHECK-NEXT: ImplicitCastExpr
327357 // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'
328- // CHECK-NEXT: IntegerLiteral{{.*}}0
358+ // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0
329359 // CHECK-NEXT: ArraySectionExpr
330360 // CHECK-NEXT: ImplicitCastExpr
331361 // 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
334364}
335365
336366struct SomeStruct {
0 commit comments