[MPI3 Fortran] Fwd: [Mpi-comments] MPI 3.0:Fortran 2008 interface - issue with the LOGICAL kind
malcolm at nag-j.co.jp
Mon Mar 4 02:00:47 CST 2013
> It would be reasonable to extend C_FUNLOC and C_F_PROCPOINTER to permit
> non-interoperable procedures, similarly to how we permit non-interoperable
> variables in C_LOC and C_F_POINTER. Then the argument could be C_FUNPTR (by
> value). I don't know whether this would help you though.
Tobias Burnus replies:
>Regarding the last sentence, I also don't know whether it helps; it seems as if
>it requires the MPI user to call "c_funloc" and to disable argument checking.
Well, the someone who passes the procedure on to the BIND(C) procedure, i.e. the
Fortran wrapper, gets to call C_FUNLOC ... so it should not affect the MPI user
who is not directly calling a BIND(C) procedure himself.
I don't see the need "to disable argument checking". Of course there will be no
argument checking on the C_FUNPTR itself, but there can be everywhere else -
including in the Fortran wrapper - nothing needs to be disabled as far as I can
> However, I believe the restriction you mention is gone with TS29113. Quoting
> its Section "8.1 Removed restrictions on ISO_C_BINDING":
Ah right, I didn't check that. Good.
>However, "9.9 Edits to clause 15" also states:
>'Append the sentence "A C function shall not invoke a a function pointer whose
>value is the result of a reference to C_FUNLOC with a noninteroperable
Well I should certainly hope so! The C function isn't going to know how to pass
the arguments to the noninteroperable procedure...
Depending on the callback design, it might well be possible to call the
noninteroperable procedure via an interoperable wrapper written in Fortran. I
have done this kind of thing before... it does require the callback design to be
capable of handling it though (I cannot comment on the MPI design as I have not
spent time studying that bit of it).
................................Malcolm Cohen, Nihon NAG, Tokyo.
More information about the mpiwg-fortran