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