[MPIWG Fortran] BIND(C) attribute of MPI callback functions
Junchao Zhang
jczhang at mcs.anl.gov
Tue Jul 1 14:00:54 CDT 2014
Hello,
Errata for MPI-3.0 removed the BIND(C) attribute of MPI callback
functions. But in an implementation, to pass the Fortran procedure to the
backend C, I need to get its C function pointer with c_funloc, as the
following code shows. When I compile it with IBM XLF 15.1, it complains
with such an error "1516-203 (S) The argument to the intrinsic procedure
C_FUNLOC must be a procedure with the BIND(C) attribute." In my
experiments, gcc and Cray ftn are fine with it. Looking at
https://gcc.gnu.org/onlinedocs/gfortran/C_005fFUNLOC.html, I find c_funloc
indeed requires an interoperable function argument. Any comments?
subroutine MPI_Comm_create_errhandler_f08(comm_errhandler_fn, errhandler,
ierror)
use, intrinsic :: iso_c_binding, only : c_funloc, c_int, c_funptr
use :: mpi_f08, only : MPI_Errhandler, MPI_Comm_errhandler_function
use :: mpi_c_interface, only : c_Errhandler,
MPIR_Comm_create_errhandler_c
implicit none
procedure(MPI_Comm_errhandler_function) :: comm_errhandler_fn
type(MPI_Errhandler), intent(out) :: errhandler
integer, optional, intent(out) :: ierror
type(c_funptr) :: comm_errhandler_fn_c
comm_errhandler_fn_c = c_funloc(comm_errhandler_fn) !! xlf issues an
error
ierror_c = MPIR_Comm_create_errhandler_c(comm_errhandler_fn_c,
errhandler%MPI_VAL)
...
end subroutine MPI_Comm_create_errhandler_f08
--Junchao Zhang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpi-forum.org/pipermail/mpiwg-fortran/attachments/20140701/74829ee4/attachment.html>
More information about the mpiwg-fortran
mailing list