<div dir="ltr"><div>Hello,</div><div>  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 <a href="https://gcc.gnu.org/onlinedocs/gfortran/C_005fFUNLOC.html">https://gcc.gnu.org/onlinedocs/gfortran/C_005fFUNLOC.html</a>, I find c_funloc indeed requires an interoperable function argument. Any comments?</div>
<div><br></div><div>subroutine MPI_Comm_create_errhandler_f08(comm_errhandler_fn, errhandler, ierror)<br></div><div><div>    use, intrinsic :: iso_c_binding, only : c_funloc, c_int, c_funptr</div><div>    use :: mpi_f08, only : MPI_Errhandler, MPI_Comm_errhandler_function</div>
<div>    use :: mpi_c_interface, only : c_Errhandler, MPIR_Comm_create_errhandler_c</div><div><br></div><div>    implicit none</div><div><br></div><div>    procedure(MPI_Comm_errhandler_function) :: comm_errhandler_fn</div>
<div>    type(MPI_Errhandler), intent(out) :: errhandler</div><div>    integer, optional, intent(out) :: ierror</div><div><br></div><div>    type(c_funptr) :: comm_errhandler_fn_c</div><div><br></div><div>    comm_errhandler_fn_c = c_funloc(comm_errhandler_fn) !! xlf issues an error </div>
<div>    ierror_c = MPIR_Comm_create_errhandler_c(comm_errhandler_fn_c, errhandler%MPI_VAL)</div><div>    ...</div><div>end subroutine MPI_Comm_create_errhandler_f08</div></div><div><br></div><div>--Junchao Zhang<br></div>
</div>