1 /* Verify that 'acc_delete' etc. with zero size is a no-op. */
2
3 #include <assert.h>
4 #include <stdlib.h>
5 #include <openacc.h>
6
7
8 #define UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
9
10
11 static void
12 verify_mapped_unchanged (unsigned char *a, size_t N)
13 {
14 assert (acc_is_present (a, N));
15
16 for (size_t i = 0; i < N; ++i)
17 assert (a[i] == (unsigned char) i);
18 }
19
20 int
21 main (int argc, char **argv)
22 {
23 const size_t N = 256;
24
25 unsigned char *a = (unsigned char *) malloc (N);
26 assert (a);
27
28 for (size_t i = 0; i < N; ++i)
29 a[i] = 51;
30
31 void *a_d = acc_copyin (a, N);
32 assert (a_d);
33
34 for (size_t i = 0; i < N; ++i)
35 a[i] = i;
36
37 int async = 0;
38
39 const size_t size = 0;
40
41 #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
42 #pragma acc exit data copyout (a[0:size])
43 verify_mapped_unchanged (a, N);
44 #endif
45 acc_copyout (a, size);
46 verify_mapped_unchanged (a, N);
47 #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
48 #pragma acc exit data copyout (a[0:size]) async (async++)
49 verify_mapped_unchanged (a, N);
50 #endif
51 acc_copyout_async (a, size, async++);
52 verify_mapped_unchanged (a, N);
53 #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
54 #pragma acc exit data copyout (a[0:size]) finalize
55 verify_mapped_unchanged (a, N);
56 #endif
57 acc_copyout_finalize (a, size);
58 verify_mapped_unchanged (a, N);
59 #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
60 #pragma acc exit data copyout (a[0:size]) finalize async (async++)
61 verify_mapped_unchanged (a, N);
62 #endif
63 acc_copyout_finalize_async (a, size, async++);
64 verify_mapped_unchanged (a, N);
65
66 #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
67 #pragma acc exit data delete (a[0:size])
68 verify_mapped_unchanged (a, N);
69 #endif
70 acc_delete (a, size);
71 verify_mapped_unchanged (a, N);
72 #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
73 #pragma acc exit data delete (a[0:size]) async (async++)
74 verify_mapped_unchanged (a, N);
75 #endif
76 acc_delete_async (a, size, async++);
77 verify_mapped_unchanged (a, N);
78 #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
79 #pragma acc exit data delete (a[0:size]) finalize
80 verify_mapped_unchanged (a, N);
81 #endif
82 acc_delete_finalize (a, size);
83 verify_mapped_unchanged (a, N);
84 #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
85 #pragma acc exit data delete (a[0:size]) finalize async (async++)
86 verify_mapped_unchanged (a, N);
87 #endif
88 acc_delete_finalize_async (a, size, async++);
89 verify_mapped_unchanged (a, N);
90
91 acc_wait_all ();
92
93 acc_delete (a, N);
94 #if !ACC_MEM_SHARED
95 assert (!acc_is_present (a, N));
96 #endif
97 free (a);
98
99 return 0;
100 }