I have committed the attached test case as Rev. 212220. The problem
popped up with the MPI version of the library. The race came apparent
with Open MPI 1.8 (but not 1.7) which shows how the one-sided
communication in Open MPI improved with 1.8 …
Tobias
Index: gcc/testsuite/ChangeLog
===================================================================
--- gcc/testsuite/ChangeLog (Revision 212219)
+++ gcc/testsuite/ChangeLog (Arbeitskopie)
@@ -1,3 +1,9 @@
+2014-07-02 Tobias Burnus <bur...@net-b.de>
+
+ * gfortran.dg/coarray/get_array.f90: Add missing SYNC ALL.
+ * gfortran.dg/coarray/send_array.f90: Ditto.
+ * gfortran.dg/coarray/sendget_array.f90: Ditto.
+
2014-07-01 James Greenhalgh <james.greenha...@arm.com>
Yufeng Zhang <yufeng.zh...@arm.com>
Index: gcc/testsuite/gfortran.dg/coarray/get_array.f90
===================================================================
--- gcc/testsuite/gfortran.dg/coarray/get_array.f90 (Revision 212219)
+++ gcc/testsuite/gfortran.dg/coarray/get_array.f90 (Arbeitskopie)
@@ -52,6 +52,7 @@ contains
if (any (a /= c)) then
call abort()
end if
+ sync all
! Scalar assignment
caf = -42
@@ -76,6 +77,7 @@ contains
if (any (a /= c)) then
call abort()
end if
+ sync all
! Array sections with different ranges and pos/neg strides
do i_sgn1 = -1, 1, 2
@@ -101,6 +103,7 @@ contains
if (any (c /= a)) then
call abort()
end if
+ sync all
end do
end do
end do
@@ -135,6 +138,7 @@ contains
if (any (a /= c)) then
call abort()
end if
+ sync all
! Scalar assignment
caf = -42
@@ -159,6 +163,7 @@ contains
if (any (a /= c)) then
call abort()
end if
+ sync all
! Array sections with different ranges and pos/neg strides
do i_sgn1 = -1, 1, 2
@@ -184,6 +189,7 @@ contains
if (any (c /= a)) then
call abort()
end if
+ sync all
end do
end do
end do
@@ -218,6 +224,7 @@ contains
if (any (a /= c)) then
call abort()
end if
+ sync all
! Scalar assignment
caf = -42
@@ -242,6 +249,7 @@ contains
if (any (a /= c)) then
call abort()
end if
+ sync all
! Array sections with different ranges and pos/neg strides
do i_sgn1 = -1, 1, 2
@@ -267,6 +275,7 @@ contains
if (any (c /= a)) then
call abort()
end if
+ sync all
end do
end do
end do
Index: gcc/testsuite/gfortran.dg/coarray/send_array.f90
===================================================================
--- gcc/testsuite/gfortran.dg/coarray/send_array.f90 (Revision 212219)
+++ gcc/testsuite/gfortran.dg/coarray/send_array.f90 (Arbeitskopie)
@@ -44,6 +44,7 @@ contains
if (any (a /= caf)) &
call abort()
end if
+ sync all
! Whole array: ARRAY = ARRAY
caf = -42
@@ -58,6 +59,7 @@ contains
if (any (a /= caf)) &
call abort()
end if
+ sync all
! Scalar assignment
caf = -42
@@ -90,6 +92,7 @@ contains
if (any (a /= caf)) &
call abort()
end if
+ sync all
! Array sections with different ranges and pos/neg strides
do i_sgn1 = -1, 1, 2
@@ -136,6 +139,7 @@ contains
call abort()
endif
end if
+ sync all
end do
end do
end do
@@ -183,6 +187,7 @@ contains
if (any (a /= caf)) &
call abort()
end if
+ sync all
! Scalar assignment
caf = -42
@@ -215,6 +220,7 @@ contains
if (any (a /= caf)) &
call abort()
end if
+ sync all
! Array sections with different ranges and pos/neg strides
do i_sgn1 = -1, 1, 2
@@ -261,6 +267,7 @@ contains
call abort()
endif
end if
+ sync all
end do
end do
end do
@@ -308,6 +315,7 @@ contains
if (any (a /= caf)) &
call abort()
end if
+ sync all
! Scalar assignment
caf = -42
@@ -386,6 +394,7 @@ contains
call abort()
endif
end if
+ sync all
end do
end do
end do
Index: gcc/testsuite/gfortran.dg/coarray/sendget_array.f90
===================================================================
--- gcc/testsuite/gfortran.dg/coarray/sendget_array.f90 (Revision 212219)
+++ gcc/testsuite/gfortran.dg/coarray/sendget_array.f90 (Arbeitskopie)
@@ -52,6 +52,7 @@ contains
if (any (a /= caf2)) then
call abort()
end if
+ sync all
! Scalar assignment
caf = -42
@@ -76,6 +77,7 @@ contains
if (any (a /= caf2)) then
call abort()
end if
+ sync all
! Array sections with different ranges and pos/neg strides
do i_sgn1 = -1, 1, 2
@@ -101,6 +103,7 @@ contains
if (any (caf2 /= a)) then
call abort()
end if
+ sync all
end do
end do
end do
@@ -135,6 +138,7 @@ contains
if (any (a /= caf2)) then
call abort()
end if
+ sync all
! Scalar assignment
caf = -42
@@ -159,6 +163,7 @@ contains
if (any (a /= caf2)) then
call abort()
end if
+ sync all
! Array sections with different ranges and pos/neg strides
do i_sgn1 = -1, 1, 2
@@ -184,6 +189,7 @@ contains
if (any (caf2 /= a)) then
call abort()
end if
+ sync all
end do
end do
end do
@@ -218,6 +224,7 @@ contains
if (any (a /= caf2)) then
call abort()
end if
+ sync all
! Scalar assignment
caf = -42
@@ -242,6 +249,7 @@ contains
if (any (a /= caf2)) then
call abort()
end if
+ sync all
! Array sections with different ranges and pos/neg strides
do i_sgn1 = -1, 1, 2
@@ -267,6 +275,7 @@ contains
if (any (caf2 /= a)) then
call abort()
end if
+ sync all
end do
end do
end do