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:
Andre Vehreschild
2026-02-14 11:37:07 -08:00
committed by Jerry DeLisle
parent a1b67de3a4
commit fc65b1e735
2 changed files with 27 additions and 0 deletions

View 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

View File

@@ -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
{