1 // RUN: %clang_cc1 -std=c++11 -verify -fopenmp %s -Wuninitialized
2
3 // RUN: %clang_cc1 -std=c++11 -verify -fopenmp-simd %s -Wuninitialized
4
5 struct ST {
6 int *a;
7 };
8 typedef int arr[10];
9 typedef ST STarr[10];
10 typedef struct {
11 int a;
12 } S;
13 struct 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;
funcSA26 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 };
100 struct SB {
101 unsigned A;
102 unsigned B;
103 float Arr[100];
104 float *Ptr;
fooSB105 float *foo() {
106 return &Arr[0];
107 }
108 };
109
110 struct 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
SCSC122 SC(SB *&_RPtrS) : RPtrS(_RPtrS) {}
123 };
124
125 union SD {
126 unsigned A;
127 float B;
128 };
129
130 struct S1;
131 extern S1 a;
132 class S2 {
133 mutable int a;
134 public:
S2()135 S2():a(0) { }
S2(S2 & s2)136 S2(S2 &s2):a(s2.a) { }
137 static float S2s;
138 static const float S2sc;
139 };
140 const float S2::S2sc = 0;
141 const S2 b;
142 const S2 ba[5];
143 class S3 {
144 int a;
145 public:
S3()146 S3():a(0) { }
S3(S3 & s3)147 S3(S3 &s3):a(s3.a) { }
148 };
149 const S3 c;
150 const S3 ca[5];
151 extern const int f;
152 class S4 {
153 int a;
154 S4();
155 S4(const S4 &s4);
156 public:
S4(int v)157 S4(int v):a(v) { }
158 };
159 class S5 {
160 int a;
S5()161 S5():a(0) {}
S5(const S5 & s5)162 S5(const S5 &s5):a(s5.a) { }
163 public:
S5(int v)164 S5(int v):a(v) { }
165 };
166
167 S3 h;
168 #pragma omp threadprivate(h)
169
170 typedef struct {
171 int a;
172 } S6;
173
174 template <typename T, int I>
175 T 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
main(int argc,char ** argv)245 int 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