[MPIWG Fortran] BIND(C) attribute of MPI callback functions

Bill Long longb at cray.com
Tue Jul 1 14:06:05 CDT 2014


On Jul 1, 2014, at 2:00 PM, Junchao Zhang <jczhang at mcs.anl.gov> wrote:

> 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?

This requirement on the argument of C_FUNLOC was removed by TS 29113, subclause 8.1 “Removed restrictions on ISO_C_BINDING module procedures”. 

Cheers,
Bill



> 
> 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
> _______________________________________________
> mpiwg-fortran mailing list
> mpiwg-fortran at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-fortran

Bill Long                                                                       longb at cray.com
Fortran Technical Suport  &                                  voice:  651-605-9024
Bioinformatics Software Development                     fax:  651-605-9142
Cray Inc./ Cray Plaza, Suite 210/ 380 Jackson St./ St. Paul, MN 55101





More information about the mpiwg-fortran mailing list