1 // RUN: %clang_cc1 -verify -fopenmp -std=c++11 \
2 // RUN: -ast-print %s | FileCheck %s
4 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 \
5 // RUN: -emit-pch -o %t %s
7 // RUN: %clang_cc1 -fopenmp -std=c++11 \
8 // RUN: -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
10 // RUN: %clang_cc1 -verify -fopenmp-simd \
11 // RUN: -std=c++11 -ast-print %s | FileCheck %s
13 // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 \
14 // RUN: -emit-pch -o %t %s
16 // RUN: %clang_cc1 -fopenmp-simd -std=c++11 \
17 // RUN: -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
19 // expected-no-diagnostics
30 const int da
[5] = { 0 };
40 #pragma omp target has_device_addr(k)
42 #pragma omp target has_device_addr(z)
44 #pragma omp target has_device_addr(aa) // OK
46 #pragma omp target has_device_addr(raa) // OK
48 #pragma omp target has_device_addr(g) // OK
50 #pragma omp target has_device_addr(rg) // OK
52 #pragma omp target has_device_addr(da) // OK
58 // CHECK-NEXT: const int da[5] = {0};
59 // CHECK-NEXT: ST g[10];
60 // CHECK-NEXT: STarr &rg = this->g;
62 // CHECK-NEXT: int &j = this->i;
63 // CHECK-NEXT: int *k = &this->j;
64 // CHECK-NEXT: int *&z = this->k;
65 // CHECK-NEXT: int aa[10];
66 // CHECK-NEXT: arr &raa = this->aa;
68 // CHECK-NEXT: #pragma omp target has_device_addr(this->k)
71 // CHECK-NEXT: #pragma omp target has_device_addr(this->z)
74 // CHECK-NEXT: #pragma omp target has_device_addr(this->aa)
77 // CHECK-NEXT: #pragma omp target has_device_addr(this->raa)
80 // CHECK-NEXT: #pragma omp target has_device_addr(this->g)
83 // CHECK-NEXT: #pragma omp target has_device_addr(this->rg)
86 // CHECK-NEXT: #pragma omp target has_device_addr(this->da)
110 SC(SB
*&_RPtrS
) : RPtrS(_RPtrS
) {}
124 S2(S2
&s2
):a(s2
.a
) { }
126 static const float S2sc
;
128 const float S2::S2sc
= 0;
135 S3(S3
&s3
):a(s3
.a
) { }
150 S5(const S5
&s5
):a(s5
.a
) { }
156 #pragma omp threadprivate(h)
162 template <typename T
>
164 const T da
[5] = { 0 };
173 #pragma omp target has_device_addr(k)
175 #pragma omp target has_device_addr(z)
177 #pragma omp target has_device_addr(aa)
179 #pragma omp target has_device_addr(raa)
181 #pragma omp target has_device_addr(h)
183 #pragma omp target has_device_addr(rh)
185 #pragma omp target has_device_addr(da)
190 // CHECK: template<> int tmain<int>(int argc) {
191 // CHECK-NEXT: const int da[5] = {0};
192 // CHECK-NEXT: S6 h[10];
193 // CHECK-NEXT: auto &rh = h;
194 // CHECK-NEXT: int i;
195 // CHECK-NEXT: int &j = i;
196 // CHECK-NEXT: int *k = &j;
197 // CHECK-NEXT: int *&z = k;
198 // CHECK-NEXT: int aa[10];
199 // CHECK-NEXT: auto &raa = aa;
200 // CHECK-NEXT: #pragma omp target has_device_addr(k)
203 // CHECK-NEXT: #pragma omp target has_device_addr(z)
206 // CHECK-NEXT: #pragma omp target has_device_addr(aa)
209 // CHECK-NEXT: #pragma omp target has_device_addr(raa)
212 // CHECK-NEXT: #pragma omp target has_device_addr(h)
215 // CHECK-NEXT: #pragma omp target has_device_addr(rh)
218 // CHECK-NEXT: #pragma omp target has_device_addr(da)
220 // CHECK: template<> int *tmain<int *>(int *argc) {
221 // CHECK-NEXT: int *const da[5] = {0};
222 // CHECK-NEXT: S6 h[10];
223 // CHECK-NEXT: auto &rh = h;
224 // CHECK-NEXT: int *i;
225 // CHECK-NEXT: int *&j = i;
226 // CHECK-NEXT: int **k = &j;
227 // CHECK-NEXT: int **&z = k;
228 // CHECK-NEXT: int *aa[10];
229 // CHECK-NEXT: auto &raa = aa;
230 // CHECK-NEXT: #pragma omp target has_device_addr(k)
233 // CHECK-NEXT: #pragma omp target has_device_addr(z)
236 // CHECK-NEXT: #pragma omp target has_device_addr(aa)
239 // CHECK-NEXT: #pragma omp target has_device_addr(raa)
242 // CHECK-NEXT: #pragma omp target has_device_addr(h)
245 // CHECK-NEXT: #pragma omp target has_device_addr(rh)
248 // CHECK-NEXT: #pragma omp target has_device_addr(da)
250 // CHECK-LABEL: int main(int argc, char **argv) {
251 int main(int argc
, char **argv
) {
252 const int da
[5] = { 0 };
261 // CHECK-NEXT: const int da[5] = {0};
262 // CHECK-NEXT: S6 h[10];
263 // CHECK-NEXT: auto &rh = h;
264 // CHECK-NEXT: int i;
265 // CHECK-NEXT: int &j = i;
266 // CHECK-NEXT: int *k = &j;
267 // CHECK-NEXT: int *&z = k;
268 // CHECK-NEXT: int aa[10];
269 // CHECK-NEXT: auto &raa = aa;
270 #pragma omp target has_device_addr(k)
271 // CHECK-NEXT: #pragma omp target has_device_addr(k)
275 #pragma omp target has_device_addr(z)
276 // CHECK-NEXT: #pragma omp target has_device_addr(z)
280 #pragma omp target has_device_addr(aa)
281 // CHECK-NEXT: #pragma omp target has_device_addr(aa)
285 #pragma omp target has_device_addr(raa)
286 // CHECK-NEXT: #pragma omp target has_device_addr(raa)
290 #pragma omp target has_device_addr(h)
291 // CHECK-NEXT: #pragma omp target has_device_addr(h)
295 #pragma omp target has_device_addr(rh)
296 // CHECK-NEXT: #pragma omp target has_device_addr(rh)
300 #pragma omp target has_device_addr(da)
301 // CHECK-NEXT: #pragma omp target has_device_addr(da)
305 // CHECK-NEXT: #pragma omp target has_device_addr(da[1:3])
308 #pragma omp target has_device_addr(da[1:3])
310 return tmain
<int>(argc
) + *tmain
<int *>(&argc
);
319 template<unsigned int nRHS
>
321 #pragma omp target has_device_addr(devPtr) device(targetDev)
324 // CHECK: #pragma omp target has_device_addr(this->devPtr) device(this->targetDev)
328 // CHECK: template<> void apply<32U>() {
329 // CHECK: #pragma omp target has_device_addr(this->devPtr) device(this->targetDev)
334 void use_template() {