Skip to content

Commit b8e2f23

Browse files
markallejsquyres
authored andcommitted
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 <awlauria@us.ibm.com> Co-authored-by: Jeff Squyres <jsquyres@cisco.com>
1 parent 9989374 commit b8e2f23

File tree

5 files changed

+27
-27
lines changed

5 files changed

+27
-27
lines changed

ompi/mpi/fortran/use-mpi-tkr/mpi-f90-interfaces.h

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1336,9 +1336,9 @@ interface MPI_Testall
13361336
subroutine MPI_Testall(count, array_of_requests, flag, array_of_statuses, ierror)
13371337
include 'mpif-config.h'
13381338
integer, intent(in) :: count
1339-
integer, dimension(count), intent(inout) :: array_of_requests
1339+
integer, dimension(*), intent(inout) :: array_of_requests
13401340
logical, intent(out) :: flag
1341-
integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses
1341+
integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses
13421342
integer, intent(out) :: ierror
13431343
end subroutine MPI_Testall
13441344

@@ -1351,7 +1351,7 @@ subroutine MPI_Testany(count, array_of_requests, index, flag, status&
13511351
, ierror)
13521352
include 'mpif-config.h'
13531353
integer, intent(in) :: count
1354-
integer, dimension(count), intent(inout) :: array_of_requests
1354+
integer, dimension(*), intent(inout) :: array_of_requests
13551355
integer, intent(out) :: index
13561356
logical, intent(out) :: flag
13571357
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
@@ -1367,7 +1367,7 @@ subroutine MPI_Testsome(incount, array_of_requests, outcount, array_of_indices,
13671367
, ierror)
13681368
include 'mpif-config.h'
13691369
integer, intent(in) :: incount
1370-
integer, dimension(incount), intent(inout) :: array_of_requests
1370+
integer, dimension(*), intent(inout) :: array_of_requests
13711371
integer, intent(out) :: outcount
13721372
integer, dimension(*), intent(out) :: array_of_indices
13731373
integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses
@@ -1830,7 +1830,7 @@ interface MPI_Waitall
18301830
subroutine MPI_Waitall(count, array_of_requests, array_of_statuses, ierror)
18311831
include 'mpif-config.h'
18321832
integer, intent(in) :: count
1833-
integer, dimension(count), intent(inout) :: array_of_requests
1833+
integer, dimension(*), intent(inout) :: array_of_requests
18341834
integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses
18351835
integer, intent(out) :: ierror
18361836
end subroutine MPI_Waitall
@@ -1843,7 +1843,7 @@ interface MPI_Waitany
18431843
subroutine MPI_Waitany(count, array_of_requests, index, status, ierror)
18441844
include 'mpif-config.h'
18451845
integer, intent(in) :: count
1846-
integer, dimension(count), intent(inout) :: array_of_requests
1846+
integer, dimension(*), intent(inout) :: array_of_requests
18471847
integer, intent(out) :: index
18481848
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
18491849
integer, intent(out) :: ierror
@@ -1858,7 +1858,7 @@ subroutine MPI_Waitsome(incount, array_of_requests, outcount, array_of_indices,
18581858
, ierror)
18591859
include 'mpif-config.h'
18601860
integer, intent(in) :: incount
1861-
integer, dimension(incount), intent(inout) :: array_of_requests
1861+
integer, dimension(*), intent(inout) :: array_of_requests
18621862
integer, intent(out) :: outcount
18631863
integer, dimension(*), intent(out) :: array_of_indices
18641864
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, &
23412341
weights, info, reorder, comm_dist_graph, ierror)
23422342
integer, intent(in) :: comm_old
23432343
integer, intent(in) :: n
2344-
integer, dimension(n), intent(in) :: sources
2345-
integer, dimension(n), intent(in) :: degrees
2346-
integer, dimension(n), intent(in) :: destinations
2347-
integer, dimension(n), intent(in) :: weights
2344+
integer, dimension(*), intent(in) :: sources
2345+
integer, dimension(*), intent(in) :: degrees
2346+
integer, dimension(*), intent(in) :: destinations
2347+
integer, dimension(*), intent(in) :: weights
23482348
integer, intent(in) :: info
23492349
logical, intent(in) :: reorder
23502350
integer, intent(out) :: comm_dist_graph
@@ -2361,11 +2361,11 @@ subroutine MPI_Dist_graph_create_adjacent(comm_old, indegree, sources, sourcewei
23612361
comm_dist_graph, ierror)
23622362
integer, intent(in) :: comm_old
23632363
integer, intent(in) :: indegree
2364-
integer, dimension(indegree), intent(in) :: sources
2365-
integer, dimension(indegree), intent(in) :: sourceweights
2364+
integer, dimension(*), intent(in) :: sources
2365+
integer, dimension(*), intent(in) :: sourceweights
23662366
integer, intent(in) :: outdegree
2367-
integer, dimension(outdegree), intent(in) :: destinations
2368-
integer, dimension(outdegree), intent(in) :: destweights
2367+
integer, dimension(*), intent(in) :: destinations
2368+
integer, dimension(*), intent(in) :: destweights
23692369
integer, intent(in) :: info
23702370
logical, intent(in) :: reorder
23712371
integer, intent(out) :: comm_dist_graph
@@ -2394,11 +2394,11 @@ subroutine MPI_Dist_graph_neighbors(comm, maxindegree, sources, sourceweights, &
23942394
maxoutdegree, destinations, destweights, ierror)
23952395
integer, intent(in) :: comm
23962396
integer, intent(in) :: maxindegree
2397-
integer, dimension(maxindegree), intent(out) :: sources
2398-
integer, dimension(maxindegree), intent(out) :: sourceweights
2397+
integer, dimension(*), intent(out) :: sources
2398+
integer, dimension(*), intent(out) :: sourceweights
23992399
integer, intent(in) :: maxoutdegree
2400-
integer, dimension(maxoutdegree), intent(out) :: destinations
2401-
integer, dimension(maxoutdegree), intent(out) :: destweights
2400+
integer, dimension(*), intent(out) :: destinations
2401+
integer, dimension(*), intent(out) :: destweights
24022402
integer, intent(out) :: ierror
24032403
end subroutine MPI_Dist_graph_neighbors
24042404

ompi/mpi/fortran/use-mpi-tkr/mpi_testall_f90.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
subroutine MPI_TestallS(count, array_of_requests, flag, array_of_statuses, ierror)
2222
include 'mpif-config.h'
2323
integer, intent(in) :: count
24-
integer, dimension(count), intent(inout) :: array_of_requests
24+
integer, dimension(*), intent(inout) :: array_of_requests
2525
logical, intent(out) :: flag
2626
integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses
2727
integer, intent(out) :: ierror
@@ -33,7 +33,7 @@ end subroutine MPI_TestallS
3333
subroutine MPI_TestallI(count, array_of_requests, flag, array_of_statuses, ierror)
3434
include 'mpif-config.h'
3535
integer, intent(in) :: count
36-
integer, dimension(count), intent(inout) :: array_of_requests
36+
integer, dimension(*), intent(inout) :: array_of_requests
3737
logical, intent(out) :: flag
3838
double precision, intent(out) :: array_of_statuses
3939
integer, intent(out) :: ierror

ompi/mpi/fortran/use-mpi-tkr/mpi_testsome_f90.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ subroutine MPI_TestsomeS(incount, array_of_requests, outcount, array_of_indices,
2222
, ierror)
2323
include 'mpif-config.h'
2424
integer, intent(in) :: incount
25-
integer, dimension(incount), intent(inout) :: array_of_requests
25+
integer, dimension(*), intent(inout) :: array_of_requests
2626
integer, intent(out) :: outcount
2727
integer, dimension(*), intent(out) :: array_of_indices
2828
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,
3636
, ierror)
3737
include 'mpif-config.h'
3838
integer, intent(in) :: incount
39-
integer, dimension(incount), intent(inout) :: array_of_requests
39+
integer, dimension(*), intent(inout) :: array_of_requests
4040
integer, intent(out) :: outcount
4141
integer, dimension(*), intent(out) :: array_of_indices
4242
double precision, intent(out) :: array_of_statuses

ompi/mpi/fortran/use-mpi-tkr/mpi_waitall_f90.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
subroutine MPI_WaitallS(count, array_of_requests, array_of_statuses, ierror)
2222
include 'mpif-config.h'
2323
integer, intent(in) :: count
24-
integer, dimension(count), intent(inout) :: array_of_requests
24+
integer, dimension(*), intent(inout) :: array_of_requests
2525
integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses
2626
integer, intent(out) :: ierror
2727
call MPI_Waitall(count, array_of_requests, array_of_statuses, ierror)
@@ -31,7 +31,7 @@ end subroutine MPI_WaitallS
3131
subroutine MPI_WaitallI(count, array_of_requests, array_of_statuses, ierror)
3232
include 'mpif-config.h'
3333
integer, intent(in) :: count
34-
integer, dimension(count), intent(inout) :: array_of_requests
34+
integer, dimension(*), intent(inout) :: array_of_requests
3535
double precision, intent(out) :: array_of_statuses
3636
integer, intent(out) :: ierror
3737
call MPI_Waitall(count, array_of_requests, array_of_statuses, ierror)

ompi/mpi/fortran/use-mpi-tkr/mpi_waitsome_f90.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ subroutine MPI_WaitsomeS(incount, array_of_requests, outcount, array_of_indices,
2222
, ierror)
2323
include 'mpif-config.h'
2424
integer, intent(in) :: incount
25-
integer, dimension(incount), intent(inout) :: array_of_requests
25+
integer, dimension(*), intent(inout) :: array_of_requests
2626
integer, intent(out) :: outcount
2727
integer, dimension(*), intent(out) :: array_of_indices
2828
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,
3636
, ierror)
3737
include 'mpif-config.h'
3838
integer, intent(in) :: incount
39-
integer, dimension(incount), intent(inout) :: array_of_requests
39+
integer, dimension(*), intent(inout) :: array_of_requests
4040
integer, intent(out) :: outcount
4141
integer, dimension(*), intent(out) :: array_of_indices
4242
double precision, intent(out) :: array_of_statuses

0 commit comments

Comments
 (0)