The gangs participating in a gang-partitioned loop are not all guaranteed to complete before some given gang continues to execute beyond that loop. This means that two existing test cases contain a race condition, because a loop that may be gang-partitioned is followed immediately by another loop. The fix is to place the loops in separate parallel regions.
Tested with offloading to AMD GCN. I will apply shortly (testsuite change only). Julian 2020-09-08 Julian Brown <jul...@codesourcery.com> libgomp/ * testsuite/libgomp.oacc-fortran/collapse-1.f90: Fix race condition. * testsuite/libgomp.oacc-fortran/collapse-2.f90: Likewise. --- libgomp/testsuite/libgomp.oacc-fortran/collapse-1.f90 | 3 +++ libgomp/testsuite/libgomp.oacc-fortran/collapse-2.f90 | 3 +++ 2 files changed, 6 insertions(+) diff --git a/libgomp/testsuite/libgomp.oacc-fortran/collapse-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/collapse-1.f90 index 918c5d0d5b1..4857752f1b0 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/collapse-1.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/collapse-1.f90 @@ -14,6 +14,9 @@ program collapse1 end do end do end do + !$acc end parallel + + !$acc parallel !$acc loop collapse(2) reduction(.or.:l) do i = 1, 3 do j = 4, 6 diff --git a/libgomp/testsuite/libgomp.oacc-fortran/collapse-2.f90 b/libgomp/testsuite/libgomp.oacc-fortran/collapse-2.f90 index 98b6987750e..0a543909127 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/collapse-2.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/collapse-2.f90 @@ -13,6 +13,9 @@ program collapse2 do 164 k = 5, 7 a(i, j, k) = i + j + k 164 end do + !$acc end parallel + + !$acc parallel !$acc loop collapse(2) reduction(.or.:l) firstdo: do i = 1, 3 do j = 4, 6 -- 2.28.0