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.] 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 Fortran callback according to the A.1.3 Fortran 2008 Bindings with the mpi_f08 module. 1d) MPI_Send_fcb Same as (1) except that the callback dummy argument is a Fortran callback according to the A.1.3 Fortran Bindings with mpif.h or the mpi module. 2a) mpi_send_f08_ Fortran interface and arguments, as in A.3. In routines with a choice buffer, the choice buffer dummy argument is implemented with non-standard extensions like !$PRAGMA IGNORE_TKR. 2b) mpi_send_f08ts_ Fortran interface and arguments, as in A.3, but only for routines with a choice buffer argument and this dummy argument is implemented with TYPE(*), DIMENSION(..). 3a) mpi_send_ Fortran interface and arguments, as in A.4. In routines with a choice buffer, the choice buffer dummy argument is implemented with non-standard extensions like !$PRAGMA IGNORE_TKR. 3b) mpi_send_fts_ Fortran interface and arguments, as in A.4, but only for routines with a choice buffer 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_. [No exceptions according to p555:35-37.] The external linkage names as mpi_send_, or mpi_send_fts_ are examples for the external linkage name that the Fortran compiler chooses for the Fortran routine names MPI_Send, or 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) - 2b); if linker names in 1a) - 1d) are used, then an additional library must be provided that uses only 2a) and 2b) in the mpi_f08 module. Using the mpi module or mpif.h, a Fortran call to MPI_Send must be implemented through a call to one of the linker names defined in 3a) and 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. 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 pmpi.h . ] [The following subsection should be removed:] 17.1.5.3 Execution environments [The following sentence must be deleted because p598:1-6 says all: "An implementation shall provide two modules, mpi and mpi_f08, and one include file, mpif.h, that Fortran program units can access in scopes that have calls to MPI routines."] [The following sentece may be added at the end of p598:18: "A scoping unit shall not specify more than one of these methods."] [The following wording is incorrect. The correct specification is given in 17.1.1 - 17.1.4: "The module mpi provides for calls to MPI routines that either have no handle arguments or have INTEGER handle arguments. It provides the values of the handles specified in A.1 compatible with INTEGER arguments. The module mpi_f08 provides for calls to MPI routines that either have no handle arguments or have handle arguments of the derived types specified in A.1 and A.3. It provides the values of the handles specified in A.1 compatible with arguments of the derived types as specified in A.3. The module mpi_f08 may specify choice arguments declarations of TYPE(*),DIMENSION(..) if TS 29113 is supported by the implementation, or traditional declarations for the choice arguments, but not both. The include file, mpif.h, provides the same user interface as the module mpi. The use of mpif.h is discouraged. Use of one of the modules is recommended instead." ]