|  | typedef enum omp_allocator_handle_t | 
|  | #if __cplusplus >= 201103L | 
|  | : __UINTPTR_TYPE__ | 
|  | #endif | 
|  | { | 
|  | omp_null_allocator = 0, | 
|  | omp_default_mem_alloc = 1, | 
|  | omp_large_cap_mem_alloc = 2, | 
|  | omp_const_mem_alloc = 3, | 
|  | omp_high_bw_mem_alloc = 4, | 
|  | omp_low_lat_mem_alloc = 5, | 
|  | omp_cgroup_mem_alloc = 6, | 
|  | omp_pteam_mem_alloc = 7, | 
|  | omp_thread_mem_alloc = 8, | 
|  | __omp_allocator_handle_t_max__ = __UINTPTR_MAX__ | 
|  | } omp_allocator_handle_t; | 
|  |  | 
|  | int bar (int, int *, int); | 
|  | omp_allocator_handle_t baz (void); | 
|  |  | 
|  | void | 
|  | foo (int x, int z) | 
|  | { | 
|  | int y[16] = { 0 }, r = 0, i; | 
|  | omp_allocator_handle_t h = baz (); | 
|  | #pragma omp parallel allocate (align (sizeof (int)) : x) allocate (allocator (omp_default_mem_alloc) : y) \ | 
|  | allocate (align (8), allocator ((omp_allocator_handle_t) omp_default_mem_alloc):z) firstprivate (x, y, z) | 
|  | bar (x, y, z); | 
|  | #pragma omp task private (x) firstprivate (z) allocate (allocator (omp_low_lat_mem_alloc) :x,z) | 
|  | bar (0, &x, z); | 
|  | #pragma omp taskwait | 
|  | #pragma omp target teams distribute parallel for private (x) firstprivate (y) \ | 
|  | allocate (allocator ((omp_allocator_handle_t)(omp_default_mem_alloc + 0)), align (16) : z) \ | 
|  | allocate (allocator (omp_default_mem_alloc) : x, y) allocate (align (32), allocator (omp_low_lat_mem_alloc): r) \ | 
|  | lastprivate (z) reduction(+:r) | 
|  | for (i = 0; i < 64; i++) | 
|  | { | 
|  | z = bar (0, &x, 0); | 
|  | r += bar (1, y, 0); | 
|  | } | 
|  | #pragma omp single private (x) allocate (allocator (h):x) | 
|  | ; | 
|  | #pragma omp single allocate (align (2 * sizeof (int)), allocator (*&h) : x) private (x) | 
|  | ; | 
|  | #pragma omp parallel shared (r, x, z) | 
|  | #pragma omp single firstprivate (r) allocate (align (4) : x, r, z) private (x, z) | 
|  | ; | 
|  | #pragma omp for allocate (align (2 * 2 * 2) : x) private (x) | 
|  | for (i = 0; i < 64; i++) | 
|  | x = 1; | 
|  | #pragma omp sections private (x) allocate (allocator (omp_low_lat_mem_alloc), align (8): x) | 
|  | { | 
|  | x = 1; | 
|  | #pragma omp section | 
|  | x = 2; | 
|  | #pragma omp section | 
|  | x = 3; | 
|  | } | 
|  | #pragma omp taskgroup task_reduction(+:r) allocate (allocator (omp_default_mem_alloc), align (__alignof (r)) : r) | 
|  | #pragma omp task in_reduction(+:r) allocate (align (2 * sizeof (r)), allocator (omp_default_mem_alloc) : r) | 
|  | r += bar (r, &r, 0); | 
|  | #pragma omp teams private (x) firstprivate (y) allocate (allocator (h), align (8) : x, y) | 
|  | bar (x, y, 0); | 
|  | #pragma omp taskloop lastprivate (x) reduction (+:r) allocate (align (16), allocator (h) : x, r) | 
|  | for (i = 0; i < 16; i++) | 
|  | { | 
|  | r += bar (0, &r, 0); | 
|  | x = i; | 
|  | } | 
|  | #pragma omp taskgroup task_reduction(+:r) allocate (allocator (omp_default_mem_alloc), align (64) : r) | 
|  | #pragma omp taskloop firstprivate (x) in_reduction (+:r) \ | 
|  | allocate (allocator (omp_default_mem_alloc), align (128) : x, r) | 
|  | for (i = 0; i < 16; i++) | 
|  | r += bar (x, &r, 0); | 
|  | #pragma omp taskwait | 
|  | } | 
|  |  | 
|  | void | 
|  | qux (const omp_allocator_handle_t h) | 
|  | { | 
|  | int x = 0; | 
|  | #pragma omp parallel firstprivate (x) allocate (align (16), allocator (h): x) | 
|  | x = 1; | 
|  | } |