From 1a73518a6f3ea3c07e37e894017f62dc7ddacf6f Mon Sep 17 00:00:00 2001 From: Mark Allen Date: Thu, 17 May 2018 14:34:29 -0400 Subject: [PATCH] fortran module: assumed size arg must match actual array arg of any rank Here's an example code that fails to compile prior to this checkin: use mpi integer, contiguous, pointer :: requests(:, :) integer :: ierr allocate(requests(2,2)) requests(1,1) = 1 requests(2,1) = 2 requests(1,2) = 3 requests(2,2) = 4 call MPI_Waitall(size(requests),requests,MPI_STATUSES_IGNORE,ierr) end But according to the standard under "A.4 Fortran Bindings with mpif.h or the mpi Module", waitall is supposed to take INTEGER COUNT, ARRAY_OF_REQUESTS(*) and under fortran that assumed size arg should match the above actual arg. The fortran module previously had integer, dimension(count), intent(inout) :: array_of_requests and this checkin changes it to integer, dimension(*), intent(inout) :: array_of_requests According to Rafik Zurob the rules for assumed-size arrays are such that we know the incoming array_of_requests is contiguous so nothing changes in the fundamental operation of the waitall call. Signed-off-by: Austen Lauria --- .../fortran/use-mpi-tkr/mpi-f90-interfaces.h | 36 +++++++++---------- .../fortran/use-mpi-tkr/mpi_testall_f90.f90 | 4 +-- .../fortran/use-mpi-tkr/mpi_testsome_f90.f90 | 4 +-- .../fortran/use-mpi-tkr/mpi_waitall_f90.f90 | 4 +-- .../fortran/use-mpi-tkr/mpi_waitsome_f90.f90 | 4 +-- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/ompi/mpi/fortran/use-mpi-tkr/mpi-f90-interfaces.h b/ompi/mpi/fortran/use-mpi-tkr/mpi-f90-interfaces.h index b6a5c08e71d..8105cf23333 100644 --- a/ompi/mpi/fortran/use-mpi-tkr/mpi-f90-interfaces.h +++ b/ompi/mpi/fortran/use-mpi-tkr/mpi-f90-interfaces.h @@ -1336,7 +1336,7 @@ interface MPI_Testall subroutine MPI_Testall(count, array_of_requests, flag, array_of_statuses, ierror) include 'mpif-config.h' integer, intent(in) :: count - integer, dimension(count), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests logical, intent(out) :: flag integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses integer, intent(out) :: ierror @@ -1351,7 +1351,7 @@ subroutine MPI_Testany(count, array_of_requests, index, flag, status& , ierror) include 'mpif-config.h' integer, intent(in) :: count - integer, dimension(count), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests integer, intent(out) :: index logical, intent(out) :: flag integer, dimension(MPI_STATUS_SIZE), intent(out) :: status @@ -1367,7 +1367,7 @@ subroutine MPI_Testsome(incount, array_of_requests, outcount, array_of_indices, , ierror) include 'mpif-config.h' integer, intent(in) :: incount - integer, dimension(incount), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests integer, intent(out) :: outcount integer, dimension(*), intent(out) :: array_of_indices integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses @@ -1830,7 +1830,7 @@ interface MPI_Waitall subroutine MPI_Waitall(count, array_of_requests, array_of_statuses, ierror) include 'mpif-config.h' integer, intent(in) :: count - integer, dimension(count), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses integer, intent(out) :: ierror end subroutine MPI_Waitall @@ -1843,7 +1843,7 @@ interface MPI_Waitany subroutine MPI_Waitany(count, array_of_requests, index, status, ierror) include 'mpif-config.h' integer, intent(in) :: count - integer, dimension(count), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests integer, intent(out) :: index integer, dimension(MPI_STATUS_SIZE), intent(out) :: status integer, intent(out) :: ierror @@ -1858,7 +1858,7 @@ subroutine MPI_Waitsome(incount, array_of_requests, outcount, array_of_indices, , ierror) include 'mpif-config.h' integer, intent(in) :: incount - integer, dimension(incount), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests integer, intent(out) :: outcount integer, dimension(*), intent(out) :: array_of_indices integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses @@ -2341,10 +2341,10 @@ subroutine MPI_Dist_graph_create(comm_old, n, sources, degrees, destinations, & weights, info, reorder, comm_dist_graph, ierror) integer, intent(in) :: comm_old integer, intent(in) :: n - integer, dimension(n), intent(in) :: sources - integer, dimension(n), intent(in) :: degrees - integer, dimension(n), intent(in) :: destinations - integer, dimension(n), intent(in) :: weights + integer, dimension(*), intent(in) :: sources + integer, dimension(*), intent(in) :: degrees + integer, dimension(*), intent(in) :: destinations + integer, dimension(*), intent(in) :: weights integer, intent(in) :: info logical, intent(in) :: reorder integer, intent(out) :: comm_dist_graph @@ -2361,11 +2361,11 @@ subroutine MPI_Dist_graph_create_adjacent(comm_old, indegree, sources, sourcewei comm_dist_graph, ierror) integer, intent(in) :: comm_old integer, intent(in) :: indegree - integer, dimension(indegree), intent(in) :: sources - integer, dimension(indegree), intent(in) :: sourceweights + integer, dimension(*), intent(in) :: sources + integer, dimension(*), intent(in) :: sourceweights integer, intent(in) :: outdegree - integer, dimension(outdegree), intent(in) :: destinations - integer, dimension(outdegree), intent(in) :: destweights + integer, dimension(*), intent(in) :: destinations + integer, dimension(*), intent(in) :: destweights integer, intent(in) :: info logical, intent(in) :: reorder integer, intent(out) :: comm_dist_graph @@ -2394,11 +2394,11 @@ subroutine MPI_Dist_graph_neighbors(comm, maxindegree, sources, sourceweights, & maxoutdegree, destinations, destweights, ierror) integer, intent(in) :: comm integer, intent(in) :: maxindegree - integer, dimension(maxindegree), intent(out) :: sources - integer, dimension(maxindegree), intent(out) :: sourceweights + integer, dimension(*), intent(out) :: sources + integer, dimension(*), intent(out) :: sourceweights integer, intent(in) :: maxoutdegree - integer, dimension(maxoutdegree), intent(out) :: destinations - integer, dimension(maxoutdegree), intent(out) :: destweights + integer, dimension(*), intent(out) :: destinations + integer, dimension(*), intent(out) :: destweights integer, intent(out) :: ierror end subroutine MPI_Dist_graph_neighbors diff --git a/ompi/mpi/fortran/use-mpi-tkr/mpi_testall_f90.f90 b/ompi/mpi/fortran/use-mpi-tkr/mpi_testall_f90.f90 index c54478f95c6..84a54ee87e8 100644 --- a/ompi/mpi/fortran/use-mpi-tkr/mpi_testall_f90.f90 +++ b/ompi/mpi/fortran/use-mpi-tkr/mpi_testall_f90.f90 @@ -21,7 +21,7 @@ subroutine MPI_TestallS(count, array_of_requests, flag, array_of_statuses, ierror) include 'mpif-config.h' integer, intent(in) :: count - integer, dimension(count), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests logical, intent(out) :: flag integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses integer, intent(out) :: ierror @@ -33,7 +33,7 @@ end subroutine MPI_TestallS subroutine MPI_TestallI(count, array_of_requests, flag, array_of_statuses, ierror) include 'mpif-config.h' integer, intent(in) :: count - integer, dimension(count), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests logical, intent(out) :: flag double precision, intent(out) :: array_of_statuses integer, intent(out) :: ierror diff --git a/ompi/mpi/fortran/use-mpi-tkr/mpi_testsome_f90.f90 b/ompi/mpi/fortran/use-mpi-tkr/mpi_testsome_f90.f90 index bd54a27fed4..2e51025d56a 100644 --- a/ompi/mpi/fortran/use-mpi-tkr/mpi_testsome_f90.f90 +++ b/ompi/mpi/fortran/use-mpi-tkr/mpi_testsome_f90.f90 @@ -22,7 +22,7 @@ subroutine MPI_TestsomeS(incount, array_of_requests, outcount, array_of_indices, , ierror) include 'mpif-config.h' integer, intent(in) :: incount - integer, dimension(incount), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests integer, intent(out) :: outcount integer, dimension(*), intent(out) :: array_of_indices integer, dimension(MPI_STATUS_SIZE, incount), intent(out) :: array_of_statuses @@ -36,7 +36,7 @@ subroutine MPI_TestsomeI(incount, array_of_requests, outcount, array_of_indices, , ierror) include 'mpif-config.h' integer, intent(in) :: incount - integer, dimension(incount), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests integer, intent(out) :: outcount integer, dimension(*), intent(out) :: array_of_indices double precision, intent(out) :: array_of_statuses diff --git a/ompi/mpi/fortran/use-mpi-tkr/mpi_waitall_f90.f90 b/ompi/mpi/fortran/use-mpi-tkr/mpi_waitall_f90.f90 index 7a093092ae8..a3e76c1ae98 100644 --- a/ompi/mpi/fortran/use-mpi-tkr/mpi_waitall_f90.f90 +++ b/ompi/mpi/fortran/use-mpi-tkr/mpi_waitall_f90.f90 @@ -21,7 +21,7 @@ subroutine MPI_WaitallS(count, array_of_requests, array_of_statuses, ierror) include 'mpif-config.h' integer, intent(in) :: count - integer, dimension(count), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses integer, intent(out) :: ierror call MPI_Waitall(count, array_of_requests, array_of_statuses, ierror) @@ -31,7 +31,7 @@ end subroutine MPI_WaitallS subroutine MPI_WaitallI(count, array_of_requests, array_of_statuses, ierror) include 'mpif-config.h' integer, intent(in) :: count - integer, dimension(count), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests double precision, intent(out) :: array_of_statuses integer, intent(out) :: ierror call MPI_Waitall(count, array_of_requests, array_of_statuses, ierror) diff --git a/ompi/mpi/fortran/use-mpi-tkr/mpi_waitsome_f90.f90 b/ompi/mpi/fortran/use-mpi-tkr/mpi_waitsome_f90.f90 index cecd5ce4e60..80a578a9c64 100644 --- a/ompi/mpi/fortran/use-mpi-tkr/mpi_waitsome_f90.f90 +++ b/ompi/mpi/fortran/use-mpi-tkr/mpi_waitsome_f90.f90 @@ -22,7 +22,7 @@ subroutine MPI_WaitsomeS(incount, array_of_requests, outcount, array_of_indices, , ierror) include 'mpif-config.h' integer, intent(in) :: incount - integer, dimension(incount), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests integer, intent(out) :: outcount integer, dimension(*), intent(out) :: array_of_indices integer, dimension(MPI_STATUS_SIZE, incount), intent(out) :: array_of_statuses @@ -36,7 +36,7 @@ subroutine MPI_WaitsomeI(incount, array_of_requests, outcount, array_of_indices, , ierror) include 'mpif-config.h' integer, intent(in) :: incount - integer, dimension(incount), intent(inout) :: array_of_requests + integer, dimension(*), intent(inout) :: array_of_requests integer, intent(out) :: outcount integer, dimension(*), intent(out) :: array_of_indices double precision, intent(out) :: array_of_statuses