mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
Fortran: Fix coarray shared mem [PR121429]
PR fortran/121429 libgfortran/ChangeLog: * caf/shmem.c (_gfortran_caf_deregister): Add a call to sync_team. gcc/testsuite/ChangeLog: * gfortran.dg/coarray/deallocate_sync.f90: New test.
This commit is contained in:
committed by
Jerry DeLisle
parent
a1b67de3a4
commit
fc65b1e735
26
gcc/testsuite/gfortran.dg/coarray/deallocate_sync.f90
Normal file
26
gcc/testsuite/gfortran.dg/coarray/deallocate_sync.f90
Normal file
@@ -0,0 +1,26 @@
|
||||
! { dg-do run }
|
||||
! Test case from pr121429 which failed because the deallocate was not
|
||||
! doing an implicit sync all.
|
||||
program main
|
||||
implicit none
|
||||
integer, allocatable, codimension[:] :: a(:), b(:)
|
||||
integer :: n, i, left, right
|
||||
integer :: k
|
||||
n = num_images()
|
||||
i = this_image()
|
||||
! We skip this test for -fcoarray=single
|
||||
if (n .ne. 1) then
|
||||
! Verify in the testsuite that num_images = 8 as set in caf.exp
|
||||
if (n .ne. 8) error stop "Need at least three images"
|
||||
left = modulo(i+n-2,n)+1
|
||||
right = modulo(i,n)+1
|
||||
do k=1,1000
|
||||
allocate(a(k+5)[*])
|
||||
allocate(b(k)[*])
|
||||
b(:)[right] = right + 1000 * k
|
||||
deallocate (a) ! This synchronizes automatically
|
||||
if (any(b(:)[left] /= left + 1000 * k)) error stop "Test failed"
|
||||
deallocate (b)
|
||||
end do
|
||||
end if
|
||||
end program main
|
||||
@@ -465,6 +465,7 @@ _gfortran_caf_deregister (caf_token_t *token, caf_deregister_t type, int *stat,
|
||||
free (ca);
|
||||
free (TOKEN (*token));
|
||||
*token = NULL;
|
||||
sync_team (caf_current_team);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user