! { dg-additional-options "-Wall -Wextra -Wno-maybe-uninitialized" } #ifdef DEFAULT_INTEGER_8 #define ONEoFIVE 105_c_size_t*8_c_size_t #else #define ONEoFIVE 105_c_size_t*4_c_size_t #endif program main use iso_c_binding #ifdef USE_F77_INCLUDE implicit none #include "omp_lib.h" #else use omp_lib implicit none (external, type) #endif type (omp_alloctrait), parameter :: traits2(*) & & = [omp_alloctrait (omp_atk_alignment, 16), & & omp_alloctrait (omp_atk_sync_hint, omp_atv_default), & & omp_alloctrait (omp_atk_access, omp_atv_default), & & omp_alloctrait (omp_atk_pool_size, 1024), & & omp_alloctrait (omp_atk_fallback, omp_atv_default_mem_fb), & & omp_alloctrait (omp_atk_partition, omp_atv_environment)] type (omp_alloctrait), parameter :: traits3(*) & & = [omp_alloctrait (omp_atk_sync_hint, omp_atv_uncontended), & & omp_alloctrait (omp_atk_alignment, 32), & & omp_alloctrait (omp_atk_access, omp_atv_all), & & omp_alloctrait (omp_atk_pool_size, 512), & & omp_alloctrait (omp_atk_fallback, omp_atv_allocator_fb), & & omp_alloctrait (omp_atk_fb_data, 0), & & omp_alloctrait (omp_atk_partition, omp_atv_default)] type (omp_alloctrait), parameter :: traits4(*) & & = [omp_alloctrait (omp_atk_alignment, 128), & & omp_alloctrait (omp_atk_pool_size, 1024), & & omp_alloctrait (omp_atk_fallback, omp_atv_null_fb)] type (omp_alloctrait), allocatable :: traits(:), traits5(:) type(c_ptr), volatile :: cp, cq, cr integer :: i integer(c_intptr_t) :: intptr integer, pointer, volatile :: p(:), p0, q(:), r(:) integer (omp_allocator_handle_kind) :: a, a2 cp = omp_alloc (3_c_size_t * c_sizeof (i), & & omp_default_mem_alloc) if (mod (transfer (cp, intptr), 4_c_intptr_t) /= 0) stop 1 call c_f_pointer (cp, p, [3]) p(1) = 1 p(2) = 2 p(3) = 3 call omp_free (cp, omp_default_mem_alloc) cp = omp_alloc (2_c_size_t * c_sizeof (i), & & omp_default_mem_alloc) if (mod (transfer (cp, intptr), 4_c_intptr_t) /= 0) stop 2 call c_f_pointer (cp, p, [2]) p(1) = 1 p(2) = 2 call omp_free (cp, omp_null_allocator) call omp_set_default_allocator (omp_default_mem_alloc) cp = omp_alloc (c_sizeof (i), omp_null_allocator) if (mod (transfer (cp, intptr), 4_c_intptr_t) /= 0) stop 3 call c_f_pointer (cp, p0) p0 = 3 call omp_free (cp, omp_get_default_allocator ()) traits = [omp_alloctrait (omp_atk_alignment, 64), & & omp_alloctrait (omp_atk_fallback, omp_atv_null_fb), & & omp_alloctrait (omp_atk_pool_size, 4096)] a = omp_init_allocator (omp_default_mem_space, 3, traits) if (a == omp_null_allocator) stop 4 cp = omp_alloc (3072_c_size_t, a) if (mod (transfer (cp, intptr), 64_c_intptr_t) /= 0) stop 4 call c_f_pointer (cp, p, [3072 / c_sizeof (i)]) p(1) = 1 p(3072 / c_sizeof (i)) = 2 if (c_associated (omp_alloc (3072_c_size_t, a))) stop 5 call omp_free (cp, a) cp = omp_alloc (3072_c_size_t, a) call c_f_pointer (cp, p, [3072 / c_sizeof (i)]) p(1) = 3 p(3072 / c_sizeof (i)) = 4 call omp_free (cp, omp_null_allocator) call omp_set_default_allocator (a) if (omp_get_default_allocator () /= a) stop 6 cp = omp_alloc (3072_c_size_t, omp_null_allocator) if (c_associated (omp_alloc (3072_c_size_t, & & omp_null_allocator))) & & stop 7 call omp_free (cp, a) call omp_destroy_allocator (a) traits5 = traits3 a = omp_init_allocator (omp_default_mem_space, size (traits2), & & traits2) if (a == omp_null_allocator) stop 8 if (traits5(6)%key /= omp_atk_fb_data) stop 9 traits5(6)%value = a if (traits5(4)%key /= omp_atk_pool_size) stop 20 #if DEFAULT_INTEGER_8 traits5(4)%value = 1024 #endif a2 = omp_init_allocator (omp_default_mem_space, & & size (traits5), traits5) if (a2 == omp_null_allocator) stop 10 cp = omp_alloc (ONEoFIVE, a2) if (mod (transfer (cp, intptr), 32_c_intptr_t) /= 0) stop 11 call c_f_pointer (cp, p, [ONEoFIVE & & / c_sizeof (i)]) p(1) = 5 p(ONEoFIVE / c_sizeof (i)) = 6 cq = omp_alloc (768_c_size_t, a2) if (mod (transfer (cq, intptr), 16_c_intptr_t) /= 0) stop 12 call c_f_pointer (cq, q, [768 / c_sizeof (i)]) q(1) = 7 q(768 / c_sizeof (i)) = 8 cr = omp_alloc (512_c_size_t, a2) if (mod (transfer (cr, intptr), 4_c_intptr_t) /= 0) stop 13 call c_f_pointer (cr, r, [512 / c_sizeof (i)]) r(1) = 9 r(512 / c_sizeof (i)) = 10 call omp_free (cp, omp_null_allocator) call omp_free (cq, a2) call omp_free (cr, omp_null_allocator) call omp_destroy_allocator (a2) call omp_destroy_allocator (a) a = omp_init_allocator (omp_default_mem_space, size (traits4), & & traits4) if (a == omp_null_allocator) stop 14 if (traits5(6)%key /= omp_atk_fb_data) stop 15 traits5(6)%value = a a2 = omp_init_allocator (omp_default_mem_space, & & size (traits5), traits5) if (a2 == omp_null_allocator) stop 16 call omp_set_default_allocator (a2) cp = omp_alloc (ONEoFIVE, & & omp_null_allocator) if (mod (transfer (cp, intptr), 32_c_intptr_t) /= 0) stop 17 call c_f_pointer (cp, p, [ONEoFIVE & & / c_sizeof (i)]) p(1) = 5 p(ONEoFIVE / c_sizeof (i)) = 6 cq = omp_alloc (768_c_size_t, omp_null_allocator) if (mod (transfer (cq, intptr), 128_c_intptr_t) /= 0) stop 18 call c_f_pointer (cq, q, [768 / c_sizeof (i)]) q(1) = 7 q(768 / c_sizeof (i)) = 8 if (c_associated (omp_alloc (768_c_size_t, omp_null_allocator))) & & stop 19 call omp_free (cp, omp_null_allocator) call omp_free (cq, omp_null_allocator) call omp_free (c_null_ptr, omp_null_allocator) call omp_free (c_null_ptr, omp_null_allocator) call omp_destroy_allocator (a2) call omp_destroy_allocator (a) end program