c++: prvalue of array type [PR111286]
[official-gcc.git] / gcc / testsuite / c-c++-common / gomp / map-6.c
blob014ed35ab41523557af7ebd2f1491ca5011bec6d
1 /* { dg-do compile } */
2 /* { dg-additional-options "-fdump-tree-original" } */
4 void
5 foo (void)
7 /* Test to ensure that the close modifier is parsed and ignored in map clauses. */
8 int a, b, b1, b2, b3, b4, b5, b6, b7;
10 #pragma omp target map (a)
13 #pragma omp target map (to:a)
16 #pragma omp target map (a to: b) /* { dg-error "'map' clause with map-type modifier other than 'always', 'close' or 'present'" } */
19 #pragma omp target map (close, a to: b) /* { dg-error "'map' clause with map-type modifier other than 'always', 'close' or 'present'" } */
22 #pragma omp target enter data map(b7) map (close, a to: b) /* { dg-error "'map' clause with map-type modifier other than 'always', 'close' or 'present'" } */
25 #pragma omp target exit data map(b7) map (close, a from: b) /* { dg-error "'map' clause with map-type modifier other than 'always', 'close' or 'present'" } */
28 #pragma omp target data map(b7) map (close, a from: b) /* { dg-error "'map' clause with map-type modifier other than 'always', 'close' or 'present'" } */
32 #pragma omp target map (close a) /* { dg-error "'close' undeclared" "" { target c } } */
33 /* { dg-error "'close' was not declared in this scope" "" { target c++ } .-1 } */
34 /* { dg-error "expected '\\)' before 'a'" "" { target *-*-* } .-2 } */
37 #pragma omp target map (always a) /* { dg-error "'always' undeclared" "" { target c } } */
38 /* { dg-error "'always' was not declared in this scope" "" { target c++ } .-1 } */
39 /* { dg-error "expected '\\)' before 'a'" "" { target *-*-* } .-2 } */
42 #pragma omp target map (close to:a)
45 #pragma omp target map (close, to:a)
48 #pragma omp target map (close delete:a) /* { dg-error "'#pragma omp target' with map-type other than 'to', 'from', 'tofrom' or 'alloc' on 'map' clause" } */
51 #pragma omp target map (close always to:b1)
54 #pragma omp target map (close, always to:b2)
57 #pragma omp target map (close, always, to:b3)
60 #pragma omp target map (always close to:b4)
63 #pragma omp target map (always, close to:b5)
66 #pragma omp target map (always, close, to:b6)
69 #pragma omp target map (always, always, to:a) /* { dg-error "too many 'always' modifiers" } */
72 #pragma omp target map (always always, to:a) /* { dg-error "too many 'always' modifiers" } */
75 #pragma omp target map (always, always to:a) /* { dg-error "too many 'always' modifiers" } */
78 #pragma omp target map (always always to:a) /* { dg-error "too many 'always' modifiers" } */
81 #pragma omp target map (close, close, to:a) /* { dg-error "too many 'close' modifiers" } */
84 #pragma omp target map (close close, to:a) /* { dg-error "too many 'close' modifiers" } */
87 #pragma omp target map (close, close to:a) /* { dg-error "too many 'close' modifiers" } */
90 #pragma omp target map (close close to:a) /* { dg-error "too many 'close' modifiers" } */
93 #pragma omp target map (present , present , to:a) /* { dg-error "too many 'present' modifiers" } */
96 #pragma omp target map (present present , to:a) /* { dg-error "too many 'present' modifiers" } */
99 #pragma omp target map (present , present to:a) /* { dg-error "too many 'present' modifiers" } */
102 #pragma omp target map (present present to:a) /* { dg-error "too many 'present' modifiers" } */
105 #pragma omp target map (always to : a) map (close to : b) map (present,tofrom : b1) map(always,present,alloc : b2) map(close, from: b3)
108 #pragma omp target data map(tofrom:b1)
110 #pragma omp target data map(close,tofrom:b1)
112 #pragma omp target data map(close always,tofrom:b1)
114 #pragma omp target data map(close always,tofrom:b1)
116 #pragma omp target data map(close present,tofrom:b1)
118 #pragma omp target data map(close present,tofrom:b1)
120 #pragma omp target data map(always close present,tofrom:b1)
122 #pragma omp target data map(always close present,tofrom:b1)
125 #pragma omp target enter data map(alloc: a) map(to:b) map(tofrom:b1)
126 #pragma omp target enter data map(close, alloc: a) map(close,to:b) map(close,tofrom:b1)
127 #pragma omp target enter data map(always,alloc: a) map(always,to:b) map(close always,tofrom:b1)
128 #pragma omp target enter data map(always,close,alloc: a) map(close,always,to:b) map(close always,tofrom:b1)
129 #pragma omp target enter data map(present,alloc: a) map(present,to:b) map(close present,tofrom:b1)
130 #pragma omp target enter data map(present,close,alloc: a) map(close,present,to:b) map(close present,tofrom:b1)
131 #pragma omp target enter data map(present,always,alloc: a) map(always,present,to:b) map(always close present,tofrom:b1)
132 #pragma omp target enter data map(present,always,close,alloc: a) map(close,present,always,to:b) map(always close present,tofrom:b1)
134 #pragma omp target exit data map(delete: a) map(release:b) map(from:b1)
135 #pragma omp target exit data map(close,delete: a) map(close,release:b) map(close,from:b1)
136 #pragma omp target exit data map(always,delete: a) map(always,release:b) map(close always,from:b1)
137 #pragma omp target exit data map(always,close,delete: a) map(close,always,release:b) map(close always,from:b1)
138 #pragma omp target exit data map(present,delete: a) map(present,release:b) map(close present,from:b1)
139 #pragma omp target exit data map(present,close,delete: a) map(close,present,release:b) map(close present,from:b1)
140 #pragma omp target exit data map(present,always,delete: a) map(always,present,release:b) map(always close present,from:b1)
141 #pragma omp target exit data map(present,always,close,delete: a) map(close,present,always,release:b) map(always close present,from:b1)
143 int close = 0;
144 #pragma omp target map (close)
147 #pragma omp target map (close a) /* { dg-error "expected '\\)' before 'a'" } */
150 int always = 0;
151 #pragma omp target map (always)
154 #pragma omp target map (always a) /* { dg-error "expected '\\)' before 'a'" } */
157 #pragma omp target map (always, close)
160 #pragma omp target map (always, always) /* { dg-error "'always' appears more than once in map clauses" } */
163 #pragma omp target map (always, always, close) /* { dg-error "'always' appears more than once in map clauses" } */
166 #pragma omp target map (always, close, to: always, close, b7)
169 int to = 0;
170 #pragma omp target map (always, close, to)
173 #pragma omp target map (to, always, close)
175 to = always = close = 1;
177 if (to != 1 || always != 1 || close != 1)
178 __builtin_abort ();
182 /* { dg-final { scan-tree-dump-not "map\\(\[^\n\r)]*close\[^\n\r)]*to:" "original" } } */
184 /* { dg-final { scan-tree-dump-times "pragma omp target map\\(always,to:" 7 "original" } } */
186 /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b1" "original" } } */
187 /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b2" "original" } } */
188 /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b3" "original" } } */
189 /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b4" "original" } } */
190 /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b5" "original" } } */
191 /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b6" "original" } } */
192 /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b7\\) map\\(always,to:close\\) map\\(always,to:always\\)" "original" } } */
194 /* Note: 'always,alloc' is the same as 'alloc'; hence, there is no 'always' for 'b'. Additionally, 'close' is ignored. */
196 /* { dg-final { scan-tree-dump "#pragma omp target map\\(from:b3\\) map\\(present,alloc:b2\\) map\\(present,tofrom:b1\\) map\\(to:b\\) map\\(always,to:a\\)" "original" } } */
198 /* { dg-final { scan-tree-dump-times "#pragma omp target data map\\(tofrom:b1\\)\[\r\n\]" 2 "original" } } */
199 /* { dg-final { scan-tree-dump-times "#pragma omp target data map\\(always,tofrom:b1\\)\[\r\n\]" 2 "original" } } */
200 /* { dg-final { scan-tree-dump-times "#pragma omp target data map\\(present,tofrom:b1\\)\[\r\n\]" 2 "original" } } */
201 /* { dg-final { scan-tree-dump-times "#pragma omp target data map\\(always,present,tofrom:b1\\)\[\r\n\]" 2 "original" } } */
202 /* { dg-final { scan-tree-dump-times "#pragma omp target enter data map\\(to:b1\\) map\\(to:b\\) map\\(alloc:a\\)\[\r\n\]" 2 "original" } } */
203 /* { dg-final { scan-tree-dump-times "#pragma omp target enter data map\\(always,to:b1\\) map\\(always,to:b\\) map\\(alloc:a\\)\[\r\n\]" 2 "original" } } */
204 /* { dg-final { scan-tree-dump-times "#pragma omp target enter data map\\(present,to:b1\\) map\\(present,to:b\\) map\\(present,alloc:a\\)\[\r\n\]" 2 "original" } } */
205 /* { dg-final { scan-tree-dump-times "#pragma omp target enter data map\\(always,present,to:b1\\) map\\(always,present,to:b\\) map\\(present,alloc:a\\)\[\r\n\]" 2 "original" } } */
206 /* { dg-final { scan-tree-dump-times "#pragma omp target exit data map\\(from:b1\\) map\\(release:b\\) map\\(delete:a\\)\[\r\n\]" 2 "original" } } */
207 /* { dg-final { scan-tree-dump-times "#pragma omp target exit data map\\(always,from:b1\\) map\\(release:b\\) map\\(delete:a\\)\[\r\n\]" 2 "original" } } */
208 /* { dg-final { scan-tree-dump-times "#pragma omp target exit data map\\(present,from:b1\\) map\\(release:b\\) map\\(delete:a\\)\[\r\n\]" 2 "original" } } */
209 /* { dg-final { scan-tree-dump-times "#pragma omp target exit data map\\(always,present,from:b1\\) map\\(release:b\\) map\\(delete:a\\)\[\r\n\]" 2 "original" } } */