Skip to content

Commit cda094a

Browse files
committed
mpi_f08: correctly implements MPI_{COMM,TYPE,WIN}_{DUP,NULL_{COPY,DELETE}}_FN
Fixes open-mpi/ompi#1323
1 parent 728a97c commit cda094a

File tree

5 files changed

+149
-201
lines changed

5 files changed

+149
-201
lines changed

ompi/mpi/fortran/use-mpi-f08/Makefile.am

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ noinst_LTLIBRARIES = $(module_sentinel_file)
4343
mpi-f08.lo: $(module_sentinel_file)
4444
mpi-f08.lo: mpi-f08.F90
4545
mpi-f08.lo: mpi-f-interfaces-bind.h pmpi-f-interfaces-bind.h
46-
mpi-f08.lo: attr-fn-f08-callback-interfaces.h
47-
mpi-f08.lo: conversion-fn-null-f08-interface.h
4846
mpi-f08.lo: sizeof_f08.h
4947

5048
#
@@ -800,8 +798,6 @@ libmpi_usempif08_la_SOURCES = \
800798
$(pmpi_api_files) \
801799
mpi-f-interfaces-bind.h \
802800
pmpi-f-interfaces-bind.h \
803-
attr-fn-f08-callback-interfaces.h \
804-
conversion-fn-null-f08-interface.h \
805801
mpi-f08.F90 \
806802
buffer_detach.c \
807803
constants.h \
@@ -843,8 +839,6 @@ $(pmpi_api_lo_files): mpi-f08.lo
843839

844840
mpi-f08.lo: $(module_sentinel_file) $(SIZEOF_H)
845841
mpi-f08.lo: mpi-f-interfaces-bind.h pmpi-f-interfaces-bind.h
846-
mpi-f08.lo: attr-fn-f08-callback-interfaces.h
847-
mpi-f08.lo: conversion-fn-null-f08-interface.h
848842

849843
###########################################################################
850844

@@ -854,6 +848,7 @@ libforce_usempif08_internal_modules_to_be_built_la_SOURCES = \
854848
mpi-f08-types.F90 \
855849
mpi-f08-interfaces.F90 \
856850
mpi-f08-interfaces-callbacks.F90 \
851+
mpi-f08-callbacks.F90 \
857852
pmpi-f08-interfaces.F90
858853

859854
config_h = \
@@ -873,6 +868,9 @@ mpi-f08-interfaces.lo: mpi-f08-interfaces-callbacks.lo
873868
mpi-f08-interfaces-callbacks.lo: $(config_h)
874869
mpi-f08-interfaces-callbacks.lo: mpi-f08-interfaces-callbacks.F90
875870
mpi-f08-interfaces-callbacks.lo: mpi-f08-types.lo
871+
mpi-f08-callbacks.lo: $(config_h)
872+
mpi-f08-callbacks.lo: mpi-f08-callbacks.F90
873+
mpi-f08-callbacks.lo: mpi-f08-types.lo
876874
pmpi-f08-interfaces.lo: $(config_h)
877875
pmpi-f08-interfaces.lo: pmpi-f08-interfaces.F90
878876
pmpi-f08-interfaces.lo: mpi-f08-interfaces-callbacks.lo

ompi/mpi/fortran/use-mpi-f08/attr-fn-f08-callback-interfaces.h

Lines changed: 0 additions & 152 deletions
This file was deleted.

ompi/mpi/fortran/use-mpi-f08/conversion-fn-null-f08-interface.h

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
! -*- f90 -*-
2+
! Copyright (c) 2016 Research Organization for Information Science
3+
! and Technology (RIST). All rights reserved.
4+
! $COPYRIGHT$
5+
6+
#include "ompi/mpi/fortran/configure-fortran-output.h"
7+
8+
module mpi_f08_callbacks
9+
10+
! MPI3.1, p270, 5-19
11+
12+
contains
13+
14+
subroutine MPI_COMM_DUP_FN(oldcomm,comm_keyval,extra_state, &
15+
attribute_val_in,attribute_val_out,flag,ierror)
16+
use mpi_f08_types
17+
implicit none
18+
type(MPI_Comm) :: oldcomm
19+
integer :: comm_keyval, ierror
20+
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
21+
logical :: flag
22+
23+
flag = .true.
24+
attribute_val_out = attribute_val_in
25+
ierror = MPI_SUCCESS
26+
end subroutine
27+
28+
subroutine MPI_COMM_NULL_COPY_FN(oldcomm,comm_keyval,extra_state, &
29+
attribute_val_in,attribute_val_out,flag,ierror)
30+
use mpi_f08_types
31+
implicit none
32+
type(MPI_Comm) :: oldcomm
33+
integer :: comm_keyval, ierror
34+
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
35+
logical :: flag
36+
37+
flag = .false.
38+
ierror = MPI_SUCCESS
39+
end subroutine
40+
41+
subroutine MPI_COMM_NULL_DELETE_FN(comm,comm_keyval, &
42+
attribute_val, extra_state, ierror)
43+
use mpi_f08_types
44+
implicit none
45+
type(MPI_Comm) :: comm
46+
integer :: comm_keyval, ierror
47+
integer(kind=MPI_ADDRESS_KIND) :: attribute_val, extra_state
48+
49+
ierror = MPI_SUCCESS
50+
end subroutine
51+
52+
subroutine MPI_TYPE_DUP_FN(oldtype,type_keyval,extra_state, &
53+
attribute_val_in,attribute_val_out,flag,ierror)
54+
use mpi_f08_types
55+
implicit none
56+
type(MPI_Datatype) :: oldtype
57+
integer :: type_keyval, ierror
58+
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
59+
logical :: flag
60+
61+
flag = .true.
62+
attribute_val_out = attribute_val_in
63+
ierror = MPI_SUCCESS
64+
end subroutine
65+
66+
subroutine MPI_TYPE_NULL_COPY_FN(oldtype,type_keyval,extra_state, &
67+
attribute_val_in,attribute_val_out,flag,ierror)
68+
use mpi_f08_types
69+
implicit none
70+
type(MPI_Datatype) :: oldtype
71+
integer :: type_keyval, ierror
72+
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
73+
logical :: flag
74+
75+
flag = .false.
76+
ierror = MPI_SUCCESS
77+
end subroutine
78+
79+
subroutine MPI_TYPE_NULL_DELETE_FN(datatype,type_keyval, &
80+
attribute_val, extra_state, ierror)
81+
use mpi_f08_types
82+
implicit none
83+
type(MPI_Datatype) :: datatype
84+
integer :: type_keyval, ierror
85+
integer(kind=MPI_ADDRESS_KIND) :: attribute_val, extra_state
86+
87+
ierror = MPI_SUCCESS
88+
end subroutine
89+
90+
subroutine MPI_WIN_DUP_FN(oldwin,win_keyval,extra_state, &
91+
attribute_val_in,attribute_val_out,flag,ierror)
92+
use mpi_f08_types
93+
implicit none
94+
type(MPI_Win) :: oldwin
95+
integer :: win_keyval, ierror
96+
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
97+
logical :: flag
98+
99+
flag = .true.
100+
attribute_val_out = attribute_val_in
101+
ierror = MPI_SUCCESS
102+
end subroutine
103+
104+
subroutine MPI_WIN_NULL_COPY_FN(oldwin,win_keyval,extra_state, &
105+
attribute_val_in,attribute_val_out,flag,ierror)
106+
use mpi_f08_types
107+
implicit none
108+
type(MPI_Win) :: oldwin
109+
integer :: win_keyval, ierror
110+
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
111+
logical :: flag
112+
113+
flag = .false.
114+
ierror = MPI_SUCCESS
115+
end subroutine
116+
117+
subroutine MPI_WIN_NULL_DELETE_FN(win,win_keyval, &
118+
attribute_val, extra_state, ierror)
119+
use mpi_f08_types
120+
implicit none
121+
type(MPI_Win) :: win
122+
integer :: win_keyval, ierror
123+
integer(kind=MPI_ADDRESS_KIND) :: attribute_val, extra_state
124+
125+
ierror = MPI_SUCCESS
126+
end subroutine
127+
128+
subroutine MPI_CONVERSION_FN_NULL(userbuf, datatype, count, &
129+
filebuf, position, extra_state, ierror)
130+
use, intrinsic :: iso_c_binding, only : c_ptr
131+
use mpi_f08_types
132+
implicit none
133+
type(c_ptr), value :: userbuf, filebuf
134+
type(MPI_Datatype) :: datatype
135+
integer :: count, ierror
136+
integer(kind=MPI_OFFSET_KIND) :: position
137+
integer(kind=MPI_ADDRESS_KIND) :: extra_state
138+
139+
! Do nothing
140+
end subroutine
141+
142+
end module mpi_f08_callbacks

0 commit comments

Comments
 (0)