Re: [MPI3 Fortran] [Mpi-comments] MPI 3.0: Fortran 2008 interface - issue with the LOGICAL kind
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. Cheers, Bill
Regards, Nick Maclaren.
_______________________________________________ mpi3-fortran mailing list [email protected] http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran
-- Bill Long [email protected] 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
participants (1)
-
Bill Long