General changes: - All BIND(C) on MPI routine specifications within the mpi_f08 module are removed. [This is only optic, no functional change.] - All BIND(C) in the ABSTRACT INTERFACEs in A.1.3, subsection "Fortran 2008 Bindings with the mpi_f08 module" and in the corresponding MPI chapters are removed. [This is the only real change for the users, but necessary because otherwise the interface is definitely broken.] - Note that the BIND(C) on the mpi_f08 handle types (MPI-3.0 p13:1-3) is kept as it is. Rewritten Section 17.1.5: 17.1.5 Interface Specification, Linker Names and the Profiling Interface 17.1.5.1 Introduction The Fortran interface provides two main facilities - conventions for external linkage names and calling conventions so that tools can intercept calls to the MPI library and execution environments for the Fortran user based on the mpi module, the mpi_f08 module, or the mpif.h include file. The requirements are specified, but not the implementation details. 17.1.5.2 External linkage names and calling conventions A Fortran call to an MPI routine shall result in a call to a procedure with one of the following external linkage names and calling conventions. MPI_Send is used as an example. Case is significant in the names. External Linkage name Calling convention --------------------- ------------------ 1a) MPI_Send C interface and arguments, as in A.2. 1b) MPI_Send_cdesc Same as (1) except that choice arguments are pointer to CFI_cdesc_t rather than void *. 1c) MPI_Send_f08cb Same as (1) except that the callback dummy argument is a "void *" pointer to a Fortran callback according to A.1.3, subsection "Fortran 2008 Bindings with the mpi_f08 module". 1d) MPI_Send_fcb Same as (1) except that the callback dummy argument is a "void *" pointer to a Fortran callback according to A.1.3, subsection "Fortran Bindings with mpif.h or the mpi module". 2a) mpi_send_f08_ Fortran interface and arguments, as in A.3, except that in routines with a choice buffer dummy argument, this dummy argument is implemented with non-standard extensions like !$PRAGMA IGNORE_TKR, which should be identical to TYPE(*),DIMENSION(*) of TS 29113. 2b) mpi_send_f08ts_ Fortran interface and arguments, as in A.3, but only for routines with a choice buffer dummy argument and this dummy argument is implemented with TYPE(*), DIMENSION(..). 3a) mpi_send_ Fortran interface and arguments, as in A.4, except that in routines with a choice buffer dummy argument, this dummy argument is implemented with non-standard extensions like !$PRAGMA IGNORE_TKR, which should be identical to TYPE(*),DIMENSION(*) of TS 29113. 3b) mpi_send_fts_ Fortran interface and arguments, as in A.4, but only for routines with a choice buffer dummy argument and this dummy argument is implemented with TYPE(*), DIMENSION(..). For each external linkage name supported, a second entry point with the same calling characteristics shall be supplied, expect that the name is modified by prefixing with the letter "p" in the same case as the leading "m". For example, PMPI_Send and pmpi_send_. The external linkage names as mpi_send_f08_, mpi_send_f08ts_, mpi_send_, and mpi_send_fts_ are examples for the external linkage name that the particular Fortran compiler chooses for the Fortran routine names MPI_Send_f08, MPI_Sendf08ts, MPI_Send, and MPI_Send_fts. Using the mpi_f08 module, a Fortran call to MPI_Send must be implemented through a call one of the linker names defined in 1a, 1b, 1c, 2a, or 2b; if linker names in 1a - 1c are used, then an additional library together with an mpi_f08 module must be provided that guarantees that a Fortran call to an MPI routine results in a call to a procedure according to 2a or 2b. Using the mpi module, a Fortran call to MPI_Send must be implemented through a call one of the linker names defined in 1a, 1b, 1d, 3a, or 3b; if linker names in 1a, 1b, and 1d are used, then an additional library together with an mpi module must be provided that guarantees that a Fortran call to an MPI routine results in a call to a procedure according to 3a or 3b. Using mpif.h, a Fortran call to MPI_Send must be implemented through a call one of the linker names defined in 3a, or 3b. 17.1.5.3 Tools support [Here we should discuss, how we want to inform the tools developers about: - Which external linkage names are supported in the MPI library. - Which external linkage names are used by the current definitions in mpif.h, the mpi module and the mpi_f08 module. (Be careful, because call can uses a sequence of calls to 1a-3b). We should decide - whether the method of routine groups is good, or whether we provide this information for each MPI routine, - whether this information should be provided as CPP macros in the C header mpi.h, or in an extra header file for the profiling tools provider, e.g., in pmpif.h . I would prefere to use a new file pmpif.h, because - it does not cost any compile time overhead when using mpi.h by the user application, - the Fortran MPI people need not to add stuff into the C MPI header file. ]