1 | // RUN: %clang_cc1 -std=c++11 -verify -fopenmp -ferror-limit 200 %s |
2 | |
3 | // RUN: %clang_cc1 -std=c++11 -verify -fopenmp-simd -ferror-limit 200 %s |
4 | struct ST { |
5 | int *a; |
6 | }; |
7 | struct SA { |
8 | const int d = 5; |
9 | const int da[5] = { 0 }; |
10 | ST e; |
11 | ST g[10]; |
12 | int i; |
13 | int &j = i; |
14 | int *k = &j; |
15 | int *&z = k; |
16 | int aa[10]; |
17 | void func(int arg) { |
18 | #pragma omp target data map(i) use_device_ptr // expected-error {{expected '(' after 'use_device_ptr'}} |
19 | {} |
20 | #pragma omp target data map(i) use_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}} |
21 | {} |
22 | #pragma omp target data map(i) use_device_ptr() // expected-error {{expected expression}} |
23 | {} |
24 | #pragma omp target data map(i) use_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}} |
25 | {} |
26 | #pragma omp target data map(i) use_device_ptr(arg // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
27 | {} |
28 | #pragma omp target data map(i) use_device_ptr(i) // expected-error {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
29 | {} |
30 | #pragma omp target data map(i) use_device_ptr(j) // expected-error {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
31 | {} |
32 | #pragma omp target data map(i) use_device_ptr(k) // OK |
33 | {} |
34 | #pragma omp target data map(i) use_device_ptr(z) // OK |
35 | {} |
36 | #pragma omp target data map(i) use_device_ptr(aa) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
37 | {} |
38 | #pragma omp target data map(i) use_device_ptr(e) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
39 | {} |
40 | #pragma omp target data map(i) use_device_ptr(g) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
41 | {} |
42 | #pragma omp target data map(i) use_device_ptr(k,i,j) // expected-error2 {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
43 | {} |
44 | #pragma omp target data map(i) use_device_ptr(d) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
45 | {} |
46 | #pragma omp target data map(i) use_device_ptr(da) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
47 | {} |
48 | return; |
49 | } |
50 | }; |
51 | struct SB { |
52 | unsigned A; |
53 | unsigned B; |
54 | float Arr[100]; |
55 | float *Ptr; |
56 | float *foo() { |
57 | return &Arr[0]; |
58 | } |
59 | }; |
60 | |
61 | struct SC { |
62 | unsigned A : 2; |
63 | unsigned B : 3; |
64 | unsigned C; |
65 | unsigned D; |
66 | float Arr[100]; |
67 | SB S; |
68 | SB ArrS[100]; |
69 | SB *PtrS; |
70 | SB *&RPtrS; |
71 | float *Ptr; |
72 | |
73 | SC(SB *&_RPtrS) : RPtrS(_RPtrS) {} |
74 | }; |
75 | |
76 | union SD { |
77 | unsigned A; |
78 | float B; |
79 | }; |
80 | |
81 | struct S1; |
82 | extern S1 a; |
83 | class S2 { |
84 | mutable int a; |
85 | public: |
86 | S2():a(0) { } |
87 | S2(S2 &s2):a(s2.a) { } |
88 | static float S2s; |
89 | static const float S2sc; |
90 | }; |
91 | const float S2::S2sc = 0; |
92 | const S2 b; |
93 | const S2 ba[5]; |
94 | class S3 { |
95 | int a; |
96 | public: |
97 | S3():a(0) { } |
98 | S3(S3 &s3):a(s3.a) { } |
99 | }; |
100 | const S3 c; |
101 | const S3 ca[5]; |
102 | extern const int f; |
103 | class S4 { |
104 | int a; |
105 | S4(); |
106 | S4(const S4 &s4); |
107 | public: |
108 | S4(int v):a(v) { } |
109 | }; |
110 | class S5 { |
111 | int a; |
112 | S5():a(0) {} |
113 | S5(const S5 &s5):a(s5.a) { } |
114 | public: |
115 | S5(int v):a(v) { } |
116 | }; |
117 | |
118 | S3 h; |
119 | #pragma omp threadprivate(h) |
120 | |
121 | typedef int from; |
122 | |
123 | template <typename T, int I> |
124 | T tmain(T argc) { |
125 | const T d = 5; |
126 | const T da[5] = { 0 }; |
127 | S4 e(4); |
128 | S5 g(5); |
129 | T i; |
130 | T &j = i; |
131 | T *k = &j; |
132 | T *&z = k; |
133 | T aa[10]; |
134 | #pragma omp target data map(i) use_device_ptr // expected-error {{expected '(' after 'use_device_ptr'}} |
135 | {} |
136 | #pragma omp target data map(i) use_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}} |
137 | {} |
138 | #pragma omp target data map(i) use_device_ptr() // expected-error {{expected expression}} |
139 | {} |
140 | #pragma omp target data map(i) use_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}} |
141 | {} |
142 | #pragma omp target data map(i) use_device_ptr(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
143 | {} |
144 | #pragma omp target data map(i) use_device_ptr(i) // expected-error {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
145 | {} |
146 | #pragma omp target data map(i) use_device_ptr(j) // expected-error {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
147 | {} |
148 | #pragma omp target data map(i) use_device_ptr(k) // OK |
149 | {} |
150 | #pragma omp target data map(i) use_device_ptr(z) // OK |
151 | {} |
152 | #pragma omp target data map(i) use_device_ptr(aa) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
153 | {} |
154 | #pragma omp target data map(i) use_device_ptr(e) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
155 | {} |
156 | #pragma omp target data map(i) use_device_ptr(g) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
157 | {} |
158 | #pragma omp target data map(i) use_device_ptr(k,i,j) // expected-error2 {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
159 | {} |
160 | #pragma omp target data map(i) use_device_ptr(d) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
161 | {} |
162 | #pragma omp target data map(i) use_device_ptr(da) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
163 | {} |
164 | return 0; |
165 | } |
166 | |
167 | int main(int argc, char **argv) { |
168 | const int d = 5; |
169 | const int da[5] = { 0 }; |
170 | S4 e(4); |
171 | S5 g(5); |
172 | int i; |
173 | int &j = i; |
174 | int *k = &j; |
175 | int *&z = k; |
176 | int aa[10]; |
177 | #pragma omp target data map(i) use_device_ptr // expected-error {{expected '(' after 'use_device_ptr'}} |
178 | {} |
179 | #pragma omp target data map(i) use_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}} |
180 | {} |
181 | #pragma omp target data map(i) use_device_ptr() // expected-error {{expected expression}} |
182 | {} |
183 | #pragma omp target data map(i) use_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}} |
184 | {} |
185 | #pragma omp target data map(i) use_device_ptr(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
186 | {} |
187 | #pragma omp target data map(i) use_device_ptr(i) // expected-error {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
188 | {} |
189 | #pragma omp target data map(i) use_device_ptr(j) // expected-error {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
190 | {} |
191 | #pragma omp target data map(i) use_device_ptr(k) // OK |
192 | {} |
193 | #pragma omp target data map(i) use_device_ptr(z) // OK |
194 | {} |
195 | #pragma omp target data map(i) use_device_ptr(aa) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
196 | {} |
197 | #pragma omp target data map(i) use_device_ptr(e) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
198 | {} |
199 | #pragma omp target data map(i) use_device_ptr(g) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
200 | {} |
201 | #pragma omp target data map(i) use_device_ptr(k,i,j) // expected-error2 {{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
202 | {} |
203 | #pragma omp target data map(i) use_device_ptr(d) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
204 | {} |
205 | #pragma omp target data map(i) use_device_ptr(da) // expected-error{{expected pointer or reference to pointer in 'use_device_ptr' clause}} |
206 | {} |
207 | return tmain<int, 3>(argc); // expected-note {{in instantiation of function template specialization 'tmain<int, 3>' requested here}} |
208 | } |
209 | |