[PATCH] [caf_shmem] Test fails without explicit SYNC ALL

Jerry D <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
The attached patch from Andre fixes this issue. It goes on top of the other 
caf_shmem patches.

New test case which skips it for -fcoarray=single and otherwise verified that 
caf.exp is indeed setting the GFORTRAN_NUM_IMAGES to 8.

Author: Andre Vehreschild <[email protected]>
Date:   Sat Feb 14 11:37:07 2026 -0800

     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.

OK for mainline after we get the whole patch set approved. I am working through 
comments and fixes as I go so we have a trail.

Regards,

Jerry
pr121429.diff (text/x-patch, 1.9 KB)
commit 0acfae43f7b093c8d52bfbcea3a758bc24519416
Author: Andre Vehreschild <[email protected]>
Date:   Sat Feb 14 11:37:07 2026 -0800

    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.

diff --git a/gcc/testsuite/gfortran.dg/coarray/deallocate_sync.f90 b/gcc/testsuite/gfortran.dg/coarray/deallocate_sync.f90
new file mode 100644
index 00000000000..8c6f2b79fb1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray/deallocate_sync.f90
@@ -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
diff --git a/libgfortran/caf/shmem.c b/libgfortran/caf/shmem.c
index 9913db6d709..de6a2b23017 100644
--- a/libgfortran/caf/shmem.c
+++ b/libgfortran/caf/shmem.c
@@ -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
     {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.