[MPI3 Fortran] [Mpi-comments] MPI 3.0: Fortran 2008 interface - issue with the LOGICAL kind

Bill Long longb at cray.com
Mon Mar 4 13:00:05 CST 2013

On 3/4/13 12:07 PM, N.M. Maclaren wrote:
> On Mar 4 2013, Craig Rasmussen wrote:

>> Nick, can't the wrapper C code safely cast to an integer (or simple
>> assignment after testing for true/false) from a _Bool?
>> To remove BIND(C) from the MPI-3 interfaces is practically very
>> difficult to do because of the PMPI interaces.
> I am not sure what you are proposing.  My point is that LOGICAL almost
> certainly will not be interoperable (i.e. is not available in BIND(C)
> interfaces), and that using _Bool VALUE arguments or results is seriously
> problematic, even when moving between two C compilers, let alone a C and
> a Fortran one.

The use of Fortran-C interoperability the way it was intended would have 
specified Fortran interfaces directly for the C library routines, with 
no wrappers needed.  For reasons thought important, the MPI group 
decided to not do that.

The BIND(C) on the wrapper interfaces is not really focused on the 
arguments. It is mainly to define the external name for the subroutine. 
  It is still needed for that, independent of whether there are weird 
arguments with type LOGICAL.   As is the case with default INTEGER, we 
just make believe that the arguments are interoperable.  As a practical 
matter, it does not matter if the wrapper is in Fortran.

> There isn't any difficulty about a Fortran wrapper using integers (as
> C does), and converting them to LOGICAL, but it can't be BIND(C).

There is also no difficulty in having the wrapper arguments being LOGICAL.

subroutine sub (x) bind(c, name="MPI_xxx_f")
logical :: x
integer(int) :: cx

cx = merge(1, 0, x)
call mpi_xxx_c (cx)
x = (cx /= 0)

end subroutine sub

> A wrapper written in C can't do anything useful, because there are no
> interoperable LOGICAL types except the problematic LOGICAL(C_BOOL).

There are numerous reasons for not writing the wrappers in C.  Mainly 
just good code design - C knows nothing about Fortran types. You want 
the parts that depend on particulars of the Fortran typing system to be 
in Fortran.


> Regards,
> Nick Maclaren.
> _______________________________________________
> mpi3-fortran mailing list
> mpi3-fortran at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran

Bill Long                                           longb at cray.com
Fortran Technical Support    &                 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