From 7b4dbd5b7c853f0165436ef58339663edce802d5 Mon Sep 17 00:00:00 2001 From: Hafiz Abid Qadeer Date: Mon, 31 Jan 2022 19:02:14 +0000 Subject: [PATCH] [libgomp] Fix multiple issue in the testcase allocate-1.f90. 1. Thomas reported in https://gcc.gnu.org/pipermail/gcc-patches/2022-January/589039.html that this testcase is randomly failing. The problem was fixed pool size which was exhausted when there were a lot of threads. Fixed it by removing pool_size trait which causes default pool size to be used which should be big enough. 2. Array indices have been changed to check the last element in the array. 3. Remove a redundant assignment and move some code to better match C testcase. libgomp/ChangeLog: * testsuite/libgomp.fortran/allocate-1.f90: Remove pool_size trait. Test last index in w and v array. Remove redundant assignment to V(1). Move alignment checks at the end of parallel region. --- .../testsuite/libgomp.fortran/allocate-1.f90 | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/libgomp/testsuite/libgomp.fortran/allocate-1.f90 b/libgomp/testsuite/libgomp.fortran/allocate-1.f90 index 0a31d35d5ac..1547d2baeef 100644 --- a/libgomp/testsuite/libgomp.fortran/allocate-1.f90 +++ b/libgomp/testsuite/libgomp.fortran/allocate-1.f90 @@ -74,31 +74,30 @@ subroutine foo (x, p, q, h, fl) if (x /= 42) then stop 1 end if - v(1) = 7 - if ( (and(fl, 2) /= 0) .and. & - ((is_64bit_aligned(x) == 0) .or. & - (is_64bit_aligned(y) == 0) .or. & - (is_64bit_aligned(v(1)) == 0))) then - stop 2 - end if !$omp barrier y = 1; x = x + 1 v(1) = 7 - v(41) = 8 + v(42) = 8 !$omp barrier if (x /= 43 .or. y /= 1) then stop 3 end if - if (v(1) /= 7 .or. v(41) /= 8) then + if (v(1) /= 7 .or. v(42) /= 8) then stop 4 end if + if ( (and(fl, 2) /= 0) .and. & + ((is_64bit_aligned(x) == 0) .or. & + (is_64bit_aligned(y) == 0) .or. & + (is_64bit_aligned(v(1)) == 0))) then + stop 2 + end if !$omp end parallel !$omp teams !$omp parallel private (y) firstprivate (x, w) allocate (h: x, y, w) - if (x /= 42 .or. w(17) /= 17 .or. w(41) /= 41) then + if (x /= 42 .or. w(17) /= 17 .or. w(42) /= 42) then stop 5 end if !$omp barrier @@ -314,13 +313,12 @@ program main integer, dimension(4) :: p integer, dimension(4) :: q - type (omp_alloctrait) :: traits(3) + type (omp_alloctrait) :: traits(2) integer (omp_allocator_handle_kind) :: a traits = [omp_alloctrait (omp_atk_alignment, 64), & - omp_alloctrait (omp_atk_fallback, omp_atv_null_fb), & - omp_alloctrait (omp_atk_pool_size, 8192)] - a = omp_init_allocator (omp_default_mem_space, 3, traits) + omp_alloctrait (omp_atk_fallback, omp_atv_null_fb)] + a = omp_init_allocator (omp_default_mem_space, 2, traits) if (a == omp_null_allocator) stop 1 call omp_set_default_allocator (omp_default_mem_alloc); -- 2.25.1