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