| ! { dg-additional-sources alloc-7.c } |
| ! { dg-prune-output "command-line option '-fintrinsic-modules-path=.*' is valid for Fortran but not for C" } |
| module m |
| use omp_lib |
| use iso_c_binding |
| implicit none |
| |
| 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) :: traits3(7) & |
| = [ 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)] |
| |
| interface |
| integer(c_int) function get__alignof_int () bind(C) |
| import :: c_int |
| end |
| end interface |
| end module m |
| |
| program main |
| use m |
| implicit none (external, type) |
| type(c_ptr), volatile :: p, q, r |
| integer, pointer, contiguous, volatile :: ip(:), iq(:), ir(:) |
| type (omp_alloctrait) :: traits(3) |
| integer (omp_allocator_handle_kind) :: a, a2 |
| integer (c_ptrdiff_t) :: iptr |
| integer :: i |
| |
| traits = [ omp_alloctrait (omp_atk_alignment, 64), & |
| omp_alloctrait (omp_atk_fallback, omp_atv_null_fb), & |
| omp_alloctrait (omp_atk_pool_size, 4096)] |
| |
| p = omp_calloc (3_c_size_t, sizeof (0), omp_default_mem_alloc) |
| call c_f_pointer (p, ip, [3]) |
| if (mod (TRANSFER (p, iptr), get__alignof_int ()) /= 0 & |
| .or. ip(1) /= 0 .or. ip(2) /= 0 .or. ip(3) /= 0) & |
| stop 1 |
| ip(1) = 1 |
| ip(2) = 2 |
| ip(3) = 3 |
| call omp_free (p, omp_default_mem_alloc) |
| p = omp_calloc (2_c_size_t, sizeof (0), omp_default_mem_alloc) |
| call c_f_pointer (p, ip, [2]) |
| if (mod (TRANSFER (p, iptr), get__alignof_int ()) /= 0 & |
| .or. ip(1) /= 0 .or. ip(2) /= 0) & |
| stop 2 |
| ip(1) = 1 |
| ip(2) = 2 |
| call omp_free (p, omp_null_allocator) |
| call omp_set_default_allocator (omp_default_mem_alloc) |
| p = omp_calloc (1_c_size_t, sizeof (0), omp_null_allocator) |
| call c_f_pointer (p, ip, [1]) |
| if (mod (TRANSFER (p, iptr), get__alignof_int ()) /= 0 & |
| .or. ip(1) /= 0) & |
| stop 3 |
| ip(1) = 3 |
| call omp_free (p, omp_get_default_allocator ()) |
| |
| a = omp_init_allocator (omp_default_mem_space, 3, traits) |
| if (a == omp_null_allocator) & |
| stop 4 |
| p = omp_calloc (3_c_size_t, 1024_c_size_t, a) |
| call c_f_pointer (p, ip, [3072 / c_sizeof (0)]) |
| if (mod (TRANSFER (p, iptr), 64) /= 0) & |
| stop 5 |
| do i = 1, 3072 / c_sizeof (0) |
| if (ip(i) /= 0) & |
| stop 6 |
| end do |
| ip(1) = 1 |
| ip(3072 / c_sizeof (0)) = 2 |
| if (c_associated (omp_calloc (1024_c_size_t, 3_c_size_t, a))) & |
| stop 7 |
| call omp_free (p, a) |
| p = omp_calloc (512_c_size_t, 6_c_size_t, a) |
| call c_f_pointer (p, ip, [3072 / c_sizeof (0)]) |
| do i = 1, 3072 / c_sizeof (0) |
| if (ip(i) /= 0) & |
| stop 8 |
| end do |
| ip(1) = 3 |
| ip(3072 / c_sizeof (0)) = 4 |
| call omp_free (p, omp_null_allocator) |
| call omp_set_default_allocator (a) |
| if (omp_get_default_allocator () /= a) & |
| stop 9 |
| p = omp_calloc (12_c_size_t, 256_c_size_t, omp_null_allocator) |
| call c_f_pointer (p, ip, [3072 / c_sizeof (0)]) |
| do i = 1, 3072 / c_sizeof (0) |
| if (ip(i) /= 0) & |
| stop 10 |
| end do |
| if (c_associated (omp_calloc (128_c_size_t, 24_c_size_t, omp_null_allocator))) & |
| stop 11 |
| call omp_free (p, a) |
| call omp_destroy_allocator (a) |
| |
| a = omp_init_allocator (omp_default_mem_space, size (traits2), traits2) |
| if (a == omp_null_allocator) & |
| stop 12 |
| if (traits3(6)%key /= omp_atk_fb_data) & |
| stop 13 |
| traits3(6)%value = a |
| a2 = omp_init_allocator (omp_default_mem_space, size (traits3), traits3) |
| if (a2 == omp_null_allocator) & |
| stop 14 |
| p = omp_calloc (10_c_size_t, 42_c_size_t, a2) |
| call c_f_pointer (p, ip, [420 / c_sizeof (0)]) |
| do i = 1, 420 / c_sizeof (0) |
| if (ip(i) /= 0) & |
| stop 15 |
| end do |
| if (mod (TRANSFER (p, iptr), 32) /= 0) & |
| stop 16 |
| ip(1) = 5 |
| ip(420 / c_sizeof (0)) = 6 |
| q = omp_calloc (24_c_size_t, 32_c_size_t, a2) |
| call c_f_pointer (q, iq, [768 / c_sizeof (0)]) |
| if (mod (TRANSFER (q, iptr), 16) /= 0) & |
| stop 17 |
| do i = 1, 768 / c_sizeof (0) |
| if (iq(i) /= 0) & |
| stop 18 |
| end do |
| iq(1) = 7 |
| iq(768 / c_sizeof (0)) = 8 |
| r = omp_calloc (128_c_size_t, 4_c_size_t, a2) |
| call c_f_pointer (r, ir, [512 / c_sizeof (0)]) |
| if (mod (TRANSFER (r, iptr), get__alignof_int ()) /= 0) & |
| stop 19 |
| do i = 1, 512 / c_sizeof (0) |
| if (ir(i) /= 0) & |
| stop 20 |
| end do |
| ir(1) = 9 |
| ir(512 / c_sizeof (0)) = 10 |
| call omp_free (p, omp_null_allocator) |
| call omp_free (q, a2) |
| call omp_free (r, 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 21 |
| if (traits3(6)%key /= omp_atk_fb_data) & |
| stop 22 |
| traits3(6)%value = a |
| a2 = omp_init_allocator (omp_default_mem_space, size (traits3), traits3) |
| if (a2 == omp_null_allocator) & |
| stop 23 |
| call omp_set_default_allocator (a2) |
| p = omp_calloc (42_c_size_t, 10_c_size_t, omp_null_allocator) |
| call c_f_pointer (p, ip, [420 / c_sizeof (0)]) |
| if (mod (TRANSFER (p, iptr), 32) /= 0) & |
| stop 24 |
| do i = 1, 420 / c_sizeof (0) |
| if (ip(i) /= 0) & |
| stop 25 |
| end do |
| ip(1) = 5 |
| ip(420 / c_sizeof (0)) = 6 |
| q = omp_calloc (32_c_size_t, 24_c_size_t, omp_null_allocator) |
| call c_f_pointer (q, iq, [768 / c_sizeof (0)]) |
| if (mod (TRANSFER (q, iptr), 128) /= 0) & |
| stop 26 |
| do i = 1, 768 / c_sizeof (0) |
| if (iq(i) /= 0) & |
| stop 27 |
| end do |
| iq(1) = 7 |
| iq(768 / c_sizeof (0)) = 8 |
| if (c_associated (omp_calloc (24_c_size_t, 32_c_size_t, omp_null_allocator))) & |
| stop 28 |
| call omp_free (p, omp_null_allocator) |
| call omp_free (q, 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 main |