@@ -26,6 +26,48 @@ void NormalFunc() {
2626 // CHECK-NEXT: CallExpr{{.*}} 'long'
2727 // CHECK-NEXT: ImplicitCastExpr
2828 // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'
29+
30+ #pragma acc update wait async
31+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
32+ // CHECK-NEXT: wait clause
33+ // CHECK-NEXT: <<<NULL>>>
34+ // CHECK-NEXT: async clause
35+ #pragma acc update wait(some_int(), some_long()) async(some_int())
36+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
37+ // CHECK-NEXT: wait clause
38+ // CHECK-NEXT: <<<NULL>>>
39+ // CHECK-NEXT: CallExpr{{.*}}'int'
40+ // CHECK-NEXT: ImplicitCastExpr
41+ // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'
42+ // CHECK-NEXT: CallExpr{{.*}}'long'
43+ // CHECK-NEXT: ImplicitCastExpr
44+ // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'
45+ // CHECK-NEXT: async clause
46+ // CHECK-NEXT: CallExpr{{.*}}'int'
47+ // CHECK-NEXT: ImplicitCastExpr
48+ // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'
49+ #pragma acc update wait(queues:some_int(), some_long())
50+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
51+ // CHECK-NEXT: wait clause
52+ // CHECK-NEXT: <<<NULL>>>
53+ // CHECK-NEXT: CallExpr{{.*}}'int'
54+ // CHECK-NEXT: ImplicitCastExpr
55+ // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'
56+ // CHECK-NEXT: CallExpr{{.*}}'long'
57+ // CHECK-NEXT: ImplicitCastExpr
58+ // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'
59+ #pragma acc update wait(devnum: some_int() :some_int(), some_long())
60+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
61+ // CHECK-NEXT: wait clause
62+ // CHECK-NEXT: CallExpr{{.*}}'int'
63+ // CHECK-NEXT: ImplicitCastExpr
64+ // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'
65+ // CHECK-NEXT: CallExpr{{.*}}'int'
66+ // CHECK-NEXT: ImplicitCastExpr
67+ // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'
68+ // CHECK-NEXT: CallExpr{{.*}}'long'
69+ // CHECK-NEXT: ImplicitCastExpr
70+ // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'
2971}
3072
3173template <typename T>
@@ -45,6 +87,39 @@ void TemplFunc(T t) {
4587 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
4688 // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'T'
4789
90+ #pragma acc update wait async
91+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
92+ // CHECK-NEXT: wait clause
93+ // CHECK-NEXT: <<<NULL>>>
94+ // CHECK-NEXT: async clause
95+ #pragma acc update wait(T::value, t) async(T::value)
96+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
97+ // CHECK-NEXT: wait clause
98+ // CHECK-NEXT: <<<NULL>>>
99+ // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
100+ // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
101+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
102+ // CHECK-NEXT: async clause
103+ // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
104+ // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
105+ #pragma acc update wait(queues:T::value, t) async(t)
106+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
107+ // CHECK-NEXT: wait clause
108+ // CHECK-NEXT: <<<NULL>>>
109+ // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
110+ // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
111+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
112+ // CHECK-NEXT: async clause
113+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
114+ #pragma acc update wait(devnum: T::value:t, T::value)
115+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
116+ // CHECK-NEXT: wait clause
117+ // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
118+ // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
119+ // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
120+ // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'
121+ // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'
122+
48123 // Instantiation:
49124 // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void (SomeStruct)' implicit_instantiation
50125 // CHECK-NEXT: TemplateArgument type 'SomeStruct'
@@ -63,7 +138,56 @@ void TemplFunc(T t) {
63138 // CHECK-NEXT: ImplicitCastExpr {{.*}}'unsigned int'
64139 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'
65140 // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int
66- // CHECk-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'
141+ // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'
142+
143+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
144+ // CHECK-NEXT: wait clause
145+ // CHECK-NEXT: <<<NULL>>>
146+ // CHECK-NEXT: async clause
147+
148+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
149+ // CHECK-NEXT: wait clause
150+ // CHECK-NEXT: <<<NULL>>>
151+ // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
152+ // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'
153+ // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'
154+ // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
155+ // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'
156+ // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int
157+ // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'
158+ // CHECK-NEXT: async clause
159+ // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
160+ // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'
161+ // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'
162+
163+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
164+ // CHECK-NEXT: wait clause
165+ // CHECK-NEXT: <<<NULL>>>
166+ // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
167+ // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'
168+ // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'
169+ // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
170+ // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'
171+ // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int
172+ // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'
173+ // CHECK-NEXT: async clause
174+ // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
175+ // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'
176+ // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int
177+ // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'
178+
179+ // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update
180+ // CHECK-NEXT: wait clause
181+ // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
182+ // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'
183+ // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'
184+ // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
185+ // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'
186+ // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int
187+ // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'
188+ // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
189+ // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'
190+ // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'
67191}
68192
69193struct SomeStruct {
0 commit comments