1*a914888bSAlexey Bataev // RUN: %clang_cc1 -std=c++11 -verify -fopenmp %s -Wuninitialized
2986330c1SKelvin Li
3*a914888bSAlexey Bataev // RUN: %clang_cc1 -std=c++11 -verify -fopenmp-simd %s -Wuninitialized
4a8a9153aSAlexey Bataev
5986330c1SKelvin Li struct ST {
6986330c1SKelvin Li int *a;
7986330c1SKelvin Li };
8986330c1SKelvin Li typedef int arr[10];
9986330c1SKelvin Li typedef ST STarr[10];
10986330c1SKelvin Li struct SA {
11986330c1SKelvin Li const int d = 5;
12986330c1SKelvin Li const int da[5] = { 0 };
13986330c1SKelvin Li ST e;
14986330c1SKelvin Li ST g[10];
15986330c1SKelvin Li STarr &rg = g;
16986330c1SKelvin Li int i;
17986330c1SKelvin Li int &j = i;
18986330c1SKelvin Li int *k = &j;
19986330c1SKelvin Li int *&z = k;
20986330c1SKelvin Li int aa[10];
21986330c1SKelvin Li arr &raa = aa;
funcSA22986330c1SKelvin Li void func(int arg) {
23986330c1SKelvin Li #pragma omp target simd is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
24986330c1SKelvin Li for (int ii=0; ii<10; ii++)
25986330c1SKelvin Li ;
26986330c1SKelvin Li #pragma omp target simd is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
27986330c1SKelvin Li for (int ii=0; ii<10; ii++)
28986330c1SKelvin Li ;
29986330c1SKelvin Li #pragma omp target simd is_device_ptr() // expected-error {{expected expression}}
30986330c1SKelvin Li for (int ii=0; ii<10; ii++)
31986330c1SKelvin Li ;
32986330c1SKelvin Li #pragma omp target simd is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
33986330c1SKelvin Li for (int ii=0; ii<10; ii++)
34986330c1SKelvin Li ;
35986330c1SKelvin Li #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'}}
36986330c1SKelvin Li for (int ii=0; ii<10; ii++)
37986330c1SKelvin Li ;
38986330c1SKelvin Li #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'}}
39986330c1SKelvin Li for (int ii=0; ii<10; ii++)
40986330c1SKelvin Li ;
41986330c1SKelvin Li #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'}}
42986330c1SKelvin Li for (int ii=0; ii<10; ii++)
43986330c1SKelvin Li ;
44986330c1SKelvin Li #pragma omp target simd is_device_ptr(k) // OK
45986330c1SKelvin Li for (int ii=0; ii<10; ii++)
46986330c1SKelvin Li ;
47986330c1SKelvin Li #pragma omp target simd is_device_ptr(z) // OK
48986330c1SKelvin Li for (int ii=0; ii<10; ii++)
49986330c1SKelvin Li ;
50986330c1SKelvin Li #pragma omp target simd is_device_ptr(aa) // OK
51986330c1SKelvin Li for (int ii=0; ii<10; ii++)
52986330c1SKelvin Li ;
53986330c1SKelvin Li #pragma omp target simd is_device_ptr(raa) // OK
54986330c1SKelvin Li for (int ii=0; ii<10; ii++)
55986330c1SKelvin Li ;
56986330c1SKelvin Li #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'}}
57986330c1SKelvin Li for (int ii=0; ii<10; ii++)
58986330c1SKelvin Li ;
59986330c1SKelvin Li #pragma omp target simd is_device_ptr(g) // OK
60986330c1SKelvin Li for (int ii=0; ii<10; ii++)
61986330c1SKelvin Li ;
62986330c1SKelvin Li #pragma omp target simd is_device_ptr(rg) // OK
63986330c1SKelvin Li for (int ii=0; ii<10; ii++)
64986330c1SKelvin Li ;
65986330c1SKelvin Li #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'}}
66986330c1SKelvin Li for (int ii=0; ii<10; ii++)
67986330c1SKelvin Li ;
68986330c1SKelvin Li #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'}}
69986330c1SKelvin Li for (int ii=0; ii<10; ii++)
70986330c1SKelvin Li ;
71986330c1SKelvin Li #pragma omp target simd is_device_ptr(da) // OK
72986330c1SKelvin Li for (int ii=0; ii<10; ii++)
73986330c1SKelvin Li ;
74986330c1SKelvin Li return;
75986330c1SKelvin Li }
76986330c1SKelvin Li };
77986330c1SKelvin Li struct SB {
78986330c1SKelvin Li unsigned A;
79986330c1SKelvin Li unsigned B;
80986330c1SKelvin Li float Arr[100];
81986330c1SKelvin Li float *Ptr;
fooSB82986330c1SKelvin Li float *foo() {
83986330c1SKelvin Li return &Arr[0];
84986330c1SKelvin Li }
85986330c1SKelvin Li };
86986330c1SKelvin Li
87986330c1SKelvin Li struct SC {
88986330c1SKelvin Li unsigned A : 2;
89986330c1SKelvin Li unsigned B : 3;
90986330c1SKelvin Li unsigned C;
91986330c1SKelvin Li unsigned D;
92986330c1SKelvin Li float Arr[100];
93986330c1SKelvin Li SB S;
94986330c1SKelvin Li SB ArrS[100];
95986330c1SKelvin Li SB *PtrS;
96986330c1SKelvin Li SB *&RPtrS;
97986330c1SKelvin Li float *Ptr;
98986330c1SKelvin Li
SCSC99986330c1SKelvin Li SC(SB *&_RPtrS) : RPtrS(_RPtrS) {}
100986330c1SKelvin Li };
101986330c1SKelvin Li
102986330c1SKelvin Li union SD {
103986330c1SKelvin Li unsigned A;
104986330c1SKelvin Li float B;
105986330c1SKelvin Li };
106986330c1SKelvin Li
107986330c1SKelvin Li struct S1;
108986330c1SKelvin Li extern S1 a;
109986330c1SKelvin Li class S2 {
110986330c1SKelvin Li mutable int a;
111986330c1SKelvin Li public:
S2()112986330c1SKelvin Li S2():a(0) { }
S2(S2 & s2)113986330c1SKelvin Li S2(S2 &s2):a(s2.a) { }
114986330c1SKelvin Li static float S2s;
115986330c1SKelvin Li static const float S2sc;
116986330c1SKelvin Li };
117986330c1SKelvin Li const float S2::S2sc = 0;
118986330c1SKelvin Li const S2 b;
119986330c1SKelvin Li const S2 ba[5];
120986330c1SKelvin Li class S3 {
121986330c1SKelvin Li int a;
122986330c1SKelvin Li public:
S3()123986330c1SKelvin Li S3():a(0) { }
S3(S3 & s3)124986330c1SKelvin Li S3(S3 &s3):a(s3.a) { }
125986330c1SKelvin Li };
126986330c1SKelvin Li const S3 c;
127986330c1SKelvin Li const S3 ca[5];
128986330c1SKelvin Li extern const int f;
129986330c1SKelvin Li class S4 {
130986330c1SKelvin Li int a;
131986330c1SKelvin Li S4();
132986330c1SKelvin Li S4(const S4 &s4);
133986330c1SKelvin Li public:
S4(int v)134986330c1SKelvin Li S4(int v):a(v) { }
135986330c1SKelvin Li };
136986330c1SKelvin Li class S5 {
137986330c1SKelvin Li int a;
S5()138986330c1SKelvin Li S5():a(0) {}
S5(const S5 & s5)139986330c1SKelvin Li S5(const S5 &s5):a(s5.a) { }
140986330c1SKelvin Li public:
S5(int v)141986330c1SKelvin Li S5(int v):a(v) { }
142986330c1SKelvin Li };
143986330c1SKelvin Li
144986330c1SKelvin Li S3 h;
145986330c1SKelvin Li #pragma omp threadprivate(h)
146986330c1SKelvin Li
147986330c1SKelvin Li typedef struct {
148986330c1SKelvin Li int a;
149986330c1SKelvin Li } S6;
150986330c1SKelvin Li
151986330c1SKelvin Li template <typename T, int I>
tmain(T argc)152986330c1SKelvin Li T tmain(T argc) {
153986330c1SKelvin Li const T d = 5;
154986330c1SKelvin Li const T da[5] = { 0 };
155986330c1SKelvin Li S4 e(4);
156986330c1SKelvin Li S5 g(5);
157986330c1SKelvin Li S6 h[10];
158986330c1SKelvin Li auto &rh = h;
159986330c1SKelvin Li T i;
160986330c1SKelvin Li T &j = i;
161986330c1SKelvin Li T *k = &j;
162986330c1SKelvin Li T *&z = k;
163986330c1SKelvin Li T aa[10];
164986330c1SKelvin Li auto &raa = aa;
165986330c1SKelvin Li #pragma omp target simd is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
166986330c1SKelvin Li for (int kk=0; kk<20; kk++)
167986330c1SKelvin Li ;
168986330c1SKelvin Li #pragma omp target simd is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
169986330c1SKelvin Li for (int kk=0; kk<20; kk++)
170986330c1SKelvin Li ;
171986330c1SKelvin Li #pragma omp target simd is_device_ptr() // expected-error {{expected expression}}
172986330c1SKelvin Li for (int kk=0; kk<20; kk++)
173986330c1SKelvin Li ;
174986330c1SKelvin Li #pragma omp target simd is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
175986330c1SKelvin Li for (int kk=0; kk<20; kk++)
176986330c1SKelvin Li ;
177986330c1SKelvin Li #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'}}
178986330c1SKelvin Li for (int kk=0; kk<20; kk++)
179986330c1SKelvin Li ;
180986330c1SKelvin Li #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'}}
181986330c1SKelvin Li for (int kk=0; kk<20; kk++)
182986330c1SKelvin Li ;
183986330c1SKelvin Li #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'}}
184986330c1SKelvin Li for (int kk=0; kk<20; kk++)
185986330c1SKelvin Li ;
186986330c1SKelvin Li #pragma omp target simd is_device_ptr(k) // OK
187986330c1SKelvin Li for (int kk=0; kk<20; kk++)
188986330c1SKelvin Li ;
189986330c1SKelvin Li #pragma omp target simd is_device_ptr(z) // OK
190986330c1SKelvin Li for (int kk=0; kk<20; kk++)
191986330c1SKelvin Li ;
192986330c1SKelvin Li #pragma omp target simd is_device_ptr(aa) // OK
193986330c1SKelvin Li for (int kk=0; kk<20; kk++)
194986330c1SKelvin Li ;
195986330c1SKelvin Li #pragma omp target simd is_device_ptr(raa) // OK
196986330c1SKelvin Li for (int kk=0; kk<20; kk++)
197986330c1SKelvin Li ;
198986330c1SKelvin Li #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'}}
199986330c1SKelvin Li for (int kk=0; kk<20; kk++)
200986330c1SKelvin Li ;
201986330c1SKelvin Li #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'}}
202986330c1SKelvin Li for (int kk=0; kk<20; kk++)
203986330c1SKelvin Li ;
204986330c1SKelvin Li #pragma omp target simd is_device_ptr(h) // OK
205986330c1SKelvin Li for (int kk=0; kk<20; kk++)
206986330c1SKelvin Li ;
207986330c1SKelvin Li #pragma omp target simd is_device_ptr(rh) // OK
208986330c1SKelvin Li for (int kk=0; kk<20; kk++)
209986330c1SKelvin Li ;
210986330c1SKelvin Li #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'}}
211986330c1SKelvin Li for (int kk=0; kk<20; kk++)
212986330c1SKelvin Li ;
213986330c1SKelvin Li #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'}}
214986330c1SKelvin Li for (int kk=0; kk<20; kk++)
215986330c1SKelvin Li ;
216986330c1SKelvin Li #pragma omp target simd is_device_ptr(da) // OK
217986330c1SKelvin Li for (int kk=0; kk<20; kk++)
218986330c1SKelvin Li ;
219986330c1SKelvin Li return 0;
220986330c1SKelvin Li }
221986330c1SKelvin Li
main(int argc,char ** argv)222986330c1SKelvin Li int main(int argc, char **argv) {
223986330c1SKelvin Li const int d = 5;
224986330c1SKelvin Li const int da[5] = { 0 };
225986330c1SKelvin Li S4 e(4);
226986330c1SKelvin Li S5 g(5);
227986330c1SKelvin Li S6 h[10];
228986330c1SKelvin Li auto &rh = h;
229986330c1SKelvin Li int i;
230986330c1SKelvin Li int &j = i;
231986330c1SKelvin Li int *k = &j;
232986330c1SKelvin Li int *&z = k;
233986330c1SKelvin Li int aa[10];
234986330c1SKelvin Li auto &raa = aa;
235986330c1SKelvin Li #pragma omp target simd is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
236986330c1SKelvin Li for (int kk=0; kk<20; kk++)
237986330c1SKelvin Li ;
238986330c1SKelvin Li #pragma omp target simd is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
239986330c1SKelvin Li for (int kk=0; kk<20; kk++)
240986330c1SKelvin Li ;
241986330c1SKelvin Li #pragma omp target simd is_device_ptr() // expected-error {{expected expression}}
242986330c1SKelvin Li for (int kk=0; kk<20; kk++)
243986330c1SKelvin Li ;
244986330c1SKelvin Li #pragma omp target simd is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
245986330c1SKelvin Li for (int kk=0; kk<20; kk++)
246986330c1SKelvin Li ;
247986330c1SKelvin Li #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'}}
248986330c1SKelvin Li for (int kk=0; kk<20; kk++)
249986330c1SKelvin Li ;
250986330c1SKelvin Li #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'}}
251986330c1SKelvin Li for (int kk=0; kk<20; kk++)
252986330c1SKelvin Li ;
253986330c1SKelvin Li #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'}}
254986330c1SKelvin Li for (int kk=0; kk<20; kk++)
255986330c1SKelvin Li ;
256986330c1SKelvin Li #pragma omp target simd is_device_ptr(k) // OK
257986330c1SKelvin Li for (int kk=0; kk<20; kk++)
258986330c1SKelvin Li ;
259986330c1SKelvin Li #pragma omp target simd is_device_ptr(z) // OK
260986330c1SKelvin Li for (int kk=0; kk<20; kk++)
261986330c1SKelvin Li ;
262986330c1SKelvin Li #pragma omp target simd is_device_ptr(aa) // OK
263986330c1SKelvin Li for (int kk=0; kk<20; kk++)
264986330c1SKelvin Li ;
265986330c1SKelvin Li #pragma omp target simd is_device_ptr(raa) // OK
266986330c1SKelvin Li for (int kk=0; kk<20; kk++)
267986330c1SKelvin Li ;
268986330c1SKelvin Li #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'}}
269986330c1SKelvin Li for (int kk=0; kk<20; kk++)
270986330c1SKelvin Li ;
271986330c1SKelvin Li #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'}}
272986330c1SKelvin Li for (int kk=0; kk<20; kk++)
273986330c1SKelvin Li ;
274986330c1SKelvin Li #pragma omp target simd is_device_ptr(h) // OK
275986330c1SKelvin Li for (int kk=0; kk<20; kk++)
276986330c1SKelvin Li ;
277986330c1SKelvin Li #pragma omp target simd is_device_ptr(rh) // OK
278986330c1SKelvin Li for (int kk=0; kk<20; kk++)
279986330c1SKelvin Li ;
280986330c1SKelvin Li #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'}}
281986330c1SKelvin Li for (int kk=0; kk<20; kk++)
282986330c1SKelvin Li ;
283986330c1SKelvin Li #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'}}
284986330c1SKelvin Li for (int kk=0; kk<20; kk++)
285986330c1SKelvin Li ;
286986330c1SKelvin Li #pragma omp target simd is_device_ptr(da) // OK
287986330c1SKelvin Li for (int kk=0; kk<20; kk++)
288986330c1SKelvin Li ;
289986330c1SKelvin Li return tmain<int, 3>(argc); // expected-note {{in instantiation of function template specialization 'tmain<int, 3>' requested here}}
290986330c1SKelvin Li }
291