1 extern void abort (void);
3 __attribute__((noinline
, noclone
)) void
4 foo (int *p
, int *q
, int *r
, int n
, int m
)
8 #pragma omp target map(to:sep)
10 #pragma omp target data map(to:p[0:8])
12 /* For zero length array sections, p points to the start of
13 already mapped range, q to the end of it (with nothing mapped
14 after it), and r does not point to an mapped range. */
15 #pragma omp target map(alloc:p[:0]) map(to:q[:0]) map(from:r[:0]) private(i) map(from:err) firstprivate (s)
18 for (i
= 0; i
< 8; i
++)
23 if (q
!= (int *) 0 || r
!= (int *) 0)
26 else if (p
+ 8 != q
|| r
!= s
)
31 /* Implicit mapping of pointers behaves the same way. */
32 #pragma omp target private(i) map(from:err) firstprivate (s)
35 for (i
= 0; i
< 8; i
++)
40 if (q
!= (int *) 0 || r
!= (int *) 0)
43 else if (p
+ 8 != q
|| r
!= s
)
48 /* And zero-length array sections, though not known at compile
49 time, behave the same. */
50 #pragma omp target map(p[:n]) map(tofrom:q[:n]) map(alloc:r[:n]) private(i) map(from:err) firstprivate (s)
53 for (i
= 0; i
< 8; i
++)
58 if (q
!= (int *) 0 || r
!= (int *) 0)
61 else if (p
+ 8 != q
|| r
!= s
)
66 /* Non-zero length array sections, though not known at compile,
67 behave differently. */
68 #pragma omp target map(p[:m]) map(tofrom:q[:m]) map(to:r[:m]) private(i) map(from:err)
71 for (i
= 0; i
< 8; i
++)
74 if (q
[0] != 9 || r
[0] != 10)
79 #pragma omp target data map(to:q[0:1])
81 /* For zero length array sections, p points to the start of
82 already mapped range, q points to the start of another one,
83 and r to the end of the second one. */
84 #pragma omp target map(to:p[:0]) map(from:q[:0]) map(tofrom:r[:0]) private(i) map(from:err)
87 for (i
= 0; i
< 8; i
++)
102 /* Implicit mapping of pointers behaves the same way. */
103 #pragma omp target private(i) map(from:err)
106 for (i
= 0; i
< 8; i
++)
121 /* And zero-length array sections, though not known at compile
122 time, behave the same. */
123 #pragma omp target map(p[:n]) map(alloc:q[:n]) map(from:r[:n]) private(i) map(from:err)
126 for (i
= 0; i
< 8; i
++)
141 /* Non-zero length array sections, though not known at compile,
142 behave differently. */
143 #pragma omp target map(p[:m]) map(alloc:q[:m]) map(tofrom:r[:m]) private(i) map(from:err)
146 for (i
= 0; i
< 8; i
++)
149 if (q
[0] != 9 || r
[0] != 10)
162 for (i
= 0; i
< 32; i
++)
164 foo (a
+ 1, a
+ 9, a
+ 10, 0, 1);