1 // RUN: %clang_cc1 -verify -fopenmp -std=c++11 -ast-print %s | FileCheck %s
2 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
3 // RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
4 // expected-no-diagnostics
14 const int da[5] = { 0 };
24 #pragma omp target teams is_device_ptr(k)
26 #pragma omp target teams is_device_ptr(z)
28 #pragma omp target teams is_device_ptr(aa) // OK
30 #pragma omp target teams is_device_ptr(raa) // OK
32 #pragma omp target teams is_device_ptr(g) // OK
34 #pragma omp target teams is_device_ptr(rg) // OK
36 #pragma omp target teams is_device_ptr(da) // OK
42 // CHECK-NEXT: const int da[5] = {0};
43 // CHECK-NEXT: ST g[10];
44 // CHECK-NEXT: STarr &rg = this->g;
46 // CHECK-NEXT: int &j = this->i;
47 // CHECK-NEXT: int *k = &this->j;
48 // CHECK-NEXT: int *&z = this->k;
49 // CHECK-NEXT: int aa[10];
50 // CHECK-NEXT: arr &raa = this->aa;
52 // CHECK-NEXT: #pragma omp target teams is_device_ptr(this->k)
55 // CHECK-NEXT: #pragma omp target teams is_device_ptr(this->z)
58 // CHECK-NEXT: #pragma omp target teams is_device_ptr(this->aa)
61 // CHECK-NEXT: #pragma omp target teams is_device_ptr(this->raa)
64 // CHECK-NEXT: #pragma omp target teams is_device_ptr(this->g)
67 // CHECK-NEXT: #pragma omp target teams is_device_ptr(this->rg)
70 // CHECK-NEXT: #pragma omp target teams is_device_ptr(this->da)
94 SC(SB *&_RPtrS) : RPtrS(_RPtrS) {}
108 S2(S2 &s2):a(s2.a) { }
110 static const float S2sc;
112 const float S2::S2sc = 0;
119 S3(S3 &s3):a(s3.a) { }
134 S5(const S5 &s5):a(s5.a) { }
140 #pragma omp threadprivate(h)
146 template <typename T>
148 const T da[5] = { 0 };
157 #pragma omp target teams is_device_ptr(k)
159 #pragma omp target teams is_device_ptr(z)
161 #pragma omp target teams is_device_ptr(aa)
163 #pragma omp target teams is_device_ptr(raa)
165 #pragma omp target teams is_device_ptr(h)
167 #pragma omp target teams is_device_ptr(rh)
169 #pragma omp target teams is_device_ptr(da)
174 // CHECK: template<> int tmain<int>(int argc) {
175 // CHECK-NEXT: const int da[5] = {0};
176 // CHECK-NEXT: S6 h[10];
177 // CHECK-NEXT: auto &rh = h;
178 // CHECK-NEXT: int i;
179 // CHECK-NEXT: int &j = i;
180 // CHECK-NEXT: int *k = &j;
181 // CHECK-NEXT: int *&z = k;
182 // CHECK-NEXT: int aa[10];
183 // CHECK-NEXT: auto &raa = aa;
184 // CHECK-NEXT: #pragma omp target teams is_device_ptr(k)
187 // CHECK-NEXT: #pragma omp target teams is_device_ptr(z)
190 // CHECK-NEXT: #pragma omp target teams is_device_ptr(aa)
193 // CHECK-NEXT: #pragma omp target teams is_device_ptr(raa)
196 // CHECK-NEXT: #pragma omp target teams is_device_ptr(h)
199 // CHECK-NEXT: #pragma omp target teams is_device_ptr(rh)
202 // CHECK-NEXT: #pragma omp target teams is_device_ptr(da)
204 // CHECK: template<> int *tmain<int *>(int *argc) {
205 // CHECK-NEXT: int *const da[5] = {0};
206 // CHECK-NEXT: S6 h[10];
207 // CHECK-NEXT: auto &rh = h;
208 // CHECK-NEXT: int *i;
209 // CHECK-NEXT: int *&j = i;
210 // CHECK-NEXT: int **k = &j;
211 // CHECK-NEXT: int **&z = k;
212 // CHECK-NEXT: int *aa[10];
213 // CHECK-NEXT: auto &raa = aa;
214 // CHECK-NEXT: #pragma omp target teams is_device_ptr(k)
217 // CHECK-NEXT: #pragma omp target teams is_device_ptr(z)
220 // CHECK-NEXT: #pragma omp target teams is_device_ptr(aa)
223 // CHECK-NEXT: #pragma omp target teams is_device_ptr(raa)
226 // CHECK-NEXT: #pragma omp target teams is_device_ptr(h)
229 // CHECK-NEXT: #pragma omp target teams is_device_ptr(rh)
232 // CHECK-NEXT: #pragma omp target teams is_device_ptr(da)
234 // CHECK-LABEL: int main(int argc, char **argv) {
235 int main(int argc, char **argv) {
236 const int da[5] = { 0 };
245 // CHECK-NEXT: const int da[5] = {0};
246 // CHECK-NEXT: S6 h[10];
247 // CHECK-NEXT: auto &rh = h;
248 // CHECK-NEXT: int i;
249 // CHECK-NEXT: int &j = i;
250 // CHECK-NEXT: int *k = &j;
251 // CHECK-NEXT: int *&z = k;
252 // CHECK-NEXT: int aa[10];
253 // CHECK-NEXT: auto &raa = aa;
254 #pragma omp target teams is_device_ptr(k)
255 // CHECK-NEXT: #pragma omp target teams is_device_ptr(k)
259 #pragma omp target teams is_device_ptr(z)
260 // CHECK-NEXT: #pragma omp target teams is_device_ptr(z)
264 #pragma omp target teams is_device_ptr(aa)
265 // CHECK-NEXT: #pragma omp target teams is_device_ptr(aa)
269 #pragma omp target teams is_device_ptr(raa)
270 // CHECK-NEXT: #pragma omp target teams is_device_ptr(raa)
274 #pragma omp target teams is_device_ptr(h)
275 // CHECK-NEXT: #pragma omp target teams is_device_ptr(h)
279 #pragma omp target teams is_device_ptr(rh)
280 // CHECK-NEXT: #pragma omp target teams is_device_ptr(rh)
284 #pragma omp target teams is_device_ptr(da)
285 // CHECK-NEXT: #pragma omp target teams is_device_ptr(da)
289 return tmain<int>(argc) + *tmain<int *>(&argc);