1module m
2  use omp_lib
3  implicit none
4
5  type (omp_alloctrait), parameter :: traits(*) &
6    = [ omp_alloctrait (omp_atk_pool_size, 1), &
7        omp_alloctrait (omp_atk_fallback, omp_atv_abort_fb) ]
8end module m
9
10program main
11  use m
12  use iso_c_binding
13  implicit none (external, type)
14  integer (omp_allocator_handle_kind) :: a
15  integer(c_size_t), parameter :: zero = 0_c_size_t
16
17  if (c_associated (omp_alloc (zero, omp_null_allocator))) &
18    stop 1
19  if (c_associated (omp_aligned_alloc (64_c_size_t, zero, omp_null_allocator))) &
20    stop 2
21  if (c_associated (omp_calloc (zero, zero, omp_null_allocator)) &
22      .or. c_associated (omp_calloc (32_c_size_t, zero, omp_null_allocator)) &
23      .or. c_associated (omp_calloc (zero, 64_c_size_t, omp_null_allocator))) &
24    stop 3
25  if (c_associated (omp_aligned_calloc (32_c_size_t, zero, zero, omp_null_allocator)) &
26      .or. c_associated (omp_aligned_calloc (64_c_size_t, 32_c_size_t, zero, omp_null_allocator)) &
27      .or. c_associated (omp_aligned_calloc (16_c_size_t, zero, 64_c_size_t, omp_null_allocator))) &
28    stop 4
29  a = omp_init_allocator (omp_default_mem_space, 2, traits)
30  if (a /= omp_null_allocator) then
31    if (c_associated (omp_alloc (zero, a)) &
32        .or. c_associated (omp_alloc (zero, a)) &
33        .or. c_associated (omp_alloc (zero, a)) &
34        .or. c_associated (omp_aligned_alloc (16_c_size_t, zero, a)) &
35        .or. c_associated (omp_aligned_alloc (128_c_size_t, zero, a)) &
36        .or. c_associated (omp_calloc (zero, zero, a)) &
37        .or. c_associated (omp_calloc (32_c_size_t, zero, a)) &
38        .or. c_associated (omp_calloc (zero, 64_c_size_t, a)) &
39        .or. c_associated (omp_aligned_calloc (32_c_size_t, zero, zero, a)) &
40        .or. c_associated (omp_aligned_calloc (64_c_size_t, 32_c_size_t, zero, a)) &
41        .or. c_associated (omp_aligned_calloc (16_c_size_t, zero, 64_c_size_t, a))) &
42      stop 5
43    call omp_destroy_allocator (a)
44  end if
45end program main
46