Clang Project

clang_source_code/test/OpenMP/target_parallel_for_is_device_ptr_messages.cpp
1// RUN: %clang_cc1 -std=c++11 -verify -fopenmp %s
2
3// RUN: %clang_cc1 -std=c++11 -verify -fopenmp-simd %s
4
5struct ST {
6  int *a;
7};
8typedef int arr[10];
9typedef ST STarr[10];
10typedef struct {
11  int a;
12} S;
13struct SA {
14  const int d = 5;
15  const int da[5] = { 0 };
16  ST e;
17  ST g[10];
18  STarr &rg = g;
19  int i;
20  int &j = i;
21  int *k = &j;
22  int *&z = k;
23  int aa[10];
24  arr &raa = aa;
25  S *ps;
26  void func(int arg) {
27#pragma omp target parallel for is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
28    for (int ii=0; ii<10; ii++)
29      ;
30#pragma omp target parallel for is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
31    for (int ii=0; ii<10; ii++)
32      ;
33#pragma omp target parallel for is_device_ptr() // expected-error {{expected expression}}
34    for (int ii=0; ii<10; ii++)
35      ;
36#pragma omp target parallel for is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
37    for (int ii=0; ii<10; ii++)
38      ;
39#pragma omp target parallel for is_device_ptr(arg // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
40    for (int ii=0; ii<10; ii++)
41      ;
42#pragma omp target parallel for is_device_ptr(i) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
43    for (int ii=0; ii<10; ii++)
44      ;
45#pragma omp target parallel for is_device_ptr(j) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
46    for (int ii=0; ii<10; ii++)
47      ;
48#pragma omp target parallel for is_device_ptr(k) // OK
49    for (int ii=0; ii<10; ii++)
50      ;
51#pragma omp target parallel for is_device_ptr(z) // OK
52    for (int ii=0; ii<10; ii++)
53      ;
54#pragma omp target parallel for is_device_ptr(aa) // OK
55    for (int ii=0; ii<10; ii++)
56      ;
57#pragma omp target parallel for is_device_ptr(raa) // OK
58    for (int ii=0; ii<10; ii++)
59      ;   
60#pragma omp target parallel for is_device_ptr(e) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
61    for (int ii=0; ii<10; ii++)
62      ;
63#pragma omp target parallel for is_device_ptr(g) // OK
64    for (int ii=0; ii<10; ii++)
65      ;
66#pragma omp target parallel for is_device_ptr(rg) // OK
67    for (int ii=0; ii<10; ii++)
68      ;
69#pragma omp target parallel for is_device_ptr(k,i,j) // expected-error2 {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
70    for (int ii=0; ii<10; ii++)
71      ;
72#pragma omp target parallel for is_device_ptr(d) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
73    for (int ii=0; ii<10; ii++)
74      ;
75#pragma omp target parallel for is_device_ptr(da) // OK
76    for (int ii=0; ii<10; ii++)
77      ;
78#pragma omp target parallel for map(ps) is_device_ptr(ps) // expected-error{{variable already marked as mapped in current construct}} expected-note{{used here}}
79    for (int ii=0; ii<10; ii++)
80      ;
81#pragma omp target parallel for is_device_ptr(ps) map(ps) // expected-error{{variable already marked as mapped in current construct}} expected-note{{used here}}
82    for (int ii=0; ii<10; ii++)
83      ;
84#pragma omp target parallel for map(ps->a) is_device_ptr(ps) // expected-error{{variable already marked as mapped in current construct}} expected-note{{used here}}
85    for (int ii=0; ii<10; ii++)
86      ;
87#pragma omp target parallel for is_device_ptr(ps) map(ps->a) // expected-error{{pointer cannot be mapped along with a section derived from itself}} expected-note{{used here}}
88    for (int ii=0; ii<10; ii++)
89      ;
90#pragma omp target parallel for firstprivate(ps) is_device_ptr(ps) // expected-error{{firstprivate variable cannot be in a is_device_ptr clause in '#pragma omp target parallel for' directive}} expected-note{{defined as firstprivate}}
91    for (int ii=0; ii<10; ii++)
92      ;
93#pragma omp target parallel for private(ps) is_device_ptr(ps) // expected-error{{private variable cannot be in a is_device_ptr clause in '#pragma omp target parallel for' directive}} expected-note{{defined as private}}
94    for (int ii=0; ii<10; ii++)
95      ;
96
97  return;
98 }
99};
100struct SB {
101  unsigned A;
102  unsigned B;
103  float Arr[100];
104  float *Ptr;
105  float *foo() {
106    return &Arr[0];
107  }
108};
109
110struct SC {
111  unsigned A : 2;
112  unsigned B : 3;
113  unsigned C;
114  unsigned D;
115  float Arr[100];
116  SB S;
117  SB ArrS[100];
118  SB *PtrS;
119  SB *&RPtrS;
120  float *Ptr;
121
122  SC(SB *&_RPtrS) : RPtrS(_RPtrS) {}
123};
124
125union SD {
126  unsigned A;
127  float B;
128};
129
130struct S1;
131extern S1 a;
132class S2 {
133  mutable int a;
134public:
135  S2():a(0) { }
136  S2(S2 &s2):a(s2.a) { }
137  static float S2s;
138  static const float S2sc;
139};
140const float S2::S2sc = 0;
141const S2 b;
142const S2 ba[5];
143class S3 {
144  int a;
145public:
146  S3():a(0) { }
147  S3(S3 &s3):a(s3.a) { }
148};
149const S3 c;
150const S3 ca[5];
151extern const int f;
152class S4 {
153  int a;
154  S4();
155  S4(const S4 &s4);
156public:
157  S4(int v):a(v) { }
158};
159class S5 {
160  int a;
161  S5():a(0) {}
162  S5(const S5 &s5):a(s5.a) { }
163public:
164  S5(int v):a(v) { }
165};
166
167S3 h;
168#pragma omp threadprivate(h)
169
170typedef struct {
171  int a;
172} S6;
173
174template <typename T, int I>
175T tmain(T argc) {
176  const T d = 5;
177  const T da[5] = { 0 };
178  S4 e(4);
179  S5 g(5);
180  S6 h[10];
181  auto &rh = h;
182  T i;
183  T &j = i;
184  T *k = &j;
185  T *&z = k;
186  T aa[10];
187  auto &raa = aa;
188#pragma omp target parallel for is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
189  for (int kk=0; kk<20; kk++)
190    ;
191#pragma omp target parallel for is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
192  for (int kk=0; kk<20; kk++)
193    ;
194#pragma omp target parallel for is_device_ptr() // expected-error {{expected expression}}
195  for (int kk=0; kk<20; kk++)
196    ;
197#pragma omp target parallel for is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
198  for (int kk=0; kk<20; kk++)
199    ;
200#pragma omp target parallel for is_device_ptr(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
201  for (int kk=0; kk<20; kk++)
202    ;
203#pragma omp target parallel for is_device_ptr(i) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
204  for (int kk=0; kk<20; kk++)
205    ;
206#pragma omp target parallel for is_device_ptr(j) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
207  for (int kk=0; kk<20; kk++)
208    ;
209#pragma omp target parallel for is_device_ptr(k) // OK
210  for (int kk=0; kk<20; kk++)
211    ;
212#pragma omp target parallel for is_device_ptr(z) // OK
213  for (int kk=0; kk<20; kk++)
214    ;
215#pragma omp target parallel for is_device_ptr(aa) // OK
216  for (int kk=0; kk<20; kk++)
217    ;
218#pragma omp target parallel for is_device_ptr(raa) // OK
219  for (int kk=0; kk<20; kk++)
220    ;
221#pragma omp target parallel for is_device_ptr(e) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
222  for (int kk=0; kk<20; kk++)
223    ;
224#pragma omp target parallel for is_device_ptr(g) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
225  for (int kk=0; kk<20; kk++)
226    ;
227#pragma omp target parallel for is_device_ptr(h) // OK
228  for (int kk=0; kk<20; kk++)
229    ;
230#pragma omp target parallel for is_device_ptr(rh) // OK
231  for (int kk=0; kk<20; kk++)
232    ;
233#pragma omp target parallel for is_device_ptr(k,i,j) // expected-error2 {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
234  for (int kk=0; kk<20; kk++)
235    ;
236#pragma omp target parallel for is_device_ptr(d) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
237  for (int kk=0; kk<20; kk++)
238    ;
239#pragma omp target parallel for is_device_ptr(da) // OK
240  for (int kk=0; kk<20; kk++)
241    ;
242  return 0;
243}
244
245int main(int argc, char **argv) {
246  const int d = 5;
247  const int da[5] = { 0 };
248  S4 e(4);
249  S5 g(5);
250  S6 h[10];
251  auto &rh = h;
252  int i;
253  int &j = i;
254  int *k = &j;
255  int *&z = k;
256  int aa[10];
257  auto &raa = aa;
258#pragma omp target parallel for is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
259  for (int kk=0; kk<20; kk++)
260    ;
261#pragma omp target parallel for is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
262  for (int kk=0; kk<20; kk++)
263    ;
264#pragma omp target parallel for is_device_ptr() // expected-error {{expected expression}}
265  for (int kk=0; kk<20; kk++)
266    ;
267#pragma omp target parallel for is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
268  for (int kk=0; kk<20; kk++)
269    ;
270#pragma omp target parallel for is_device_ptr(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
271  for (int kk=0; kk<20; kk++)
272    ;
273#pragma omp target parallel for is_device_ptr(i) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
274  for (int kk=0; kk<20; kk++)
275    ;
276#pragma omp target parallel for is_device_ptr(j) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
277  for (int kk=0; kk<20; kk++)
278    ;
279#pragma omp target parallel for is_device_ptr(k) // OK
280  for (int kk=0; kk<20; kk++)
281    ;
282#pragma omp target parallel for is_device_ptr(z) // OK
283  for (int kk=0; kk<20; kk++)
284    ;
285#pragma omp target parallel for is_device_ptr(aa) // OK
286  for (int kk=0; kk<20; kk++)
287    ;
288#pragma omp target parallel for is_device_ptr(raa) // OK
289  for (int kk=0; kk<20; kk++)
290    ;
291#pragma omp target parallel for is_device_ptr(e) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
292  for (int kk=0; kk<20; kk++)
293    ;
294#pragma omp target parallel for is_device_ptr(g) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
295  for (int kk=0; kk<20; kk++)
296    ;
297#pragma omp target parallel for is_device_ptr(h) // OK
298  for (int kk=0; kk<20; kk++)
299    ;
300#pragma omp target parallel for is_device_ptr(rh) // OK
301  for (int kk=0; kk<20; kk++)
302    ;
303#pragma omp target parallel for is_device_ptr(k,i,j) // expected-error2 {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
304  for (int kk=0; kk<20; kk++)
305    ;
306#pragma omp target parallel for is_device_ptr(d) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
307  for (int kk=0; kk<20; kk++)
308    ;
309#pragma omp target parallel for is_device_ptr(da) // OK
310  for (int kk=0; kk<20; kk++)
311    ;
312  return tmain<int, 3>(argc); // expected-note {{in instantiation of function template specialization 'tmain<int, 3>' requested here}}
313}
314