[Mpi-22] MPI::Grequest::Start proposal
Jeff Squyres
jsquyres at [hidden]
Thu Sep 4 17:14:50 CDT 2008
FWIW, I checked this out with Doug Gregor (my C++-goto-guy) and he
basically said "yep, that's right."
On Sep 4, 2008, at 9:02 AM, Erez Haba wrote:
> I think that this is okay; when we discussed it, I thought it was a
> different fix. The proposal is just fine.
>
> -----Original Message-----
> From: mpi-22-bounces_at_[hidden] [mailto:mpi-22-bounces_at_[hidden]
> ] On Behalf Of Jeff Squyres
> Sent: Thursday, September 04, 2008 7:26 AM
> To: MPI 2.2
> Subject: [Mpi-22] MPI::Grequest::Start proposal
>
> Regarding https://svn.mpi-forum.org/trac/mpi-forum-web/wiki/mpi22/GrequestStartFnPtrArgs
> :
>
> I have confirmed in Open MPI that if you change this:
>
> static Grequest Start(Query_function, Free_function,
> Cancel_function, void *);
>
> to
>
> static Grequest Start(Query_function *, Free_function *,
> Cancel_function *, void *);
>
> Recompile and reinstall, both the implementation and same C++ user
> code compiles without warning/error.
>
> Erez raised the point that this would change the type of any
> implementation and user-declared variables that hold the function
> pointer. It does not; such a variable type must always be
> (Free_function*); it's only the type that is passed through a function
> argument that can be either (Free_function) or (Free_function*).
> Someone smarter than me in C++ can explain why. :-)
>
> Specifically, the following compiles and runs without warning/error:
>
> -----
> #include <stdio.h>
> typedef int Free_function(void *);
>
> int my_function(void*) {
> printf("In my_function\n");
> return 0;
> }
>
> void foo1(Free_function ptr) {
> Free_function *save = ptr;
> save(0);
> }
> void foo2(Free_function* ptr) {
> Free_function *save = ptr;
> save(0);
> }
> int main (int argc, char*argv[]) {
> foo1(my_function);
> foo2(my_function);
> return 0;
> }
> -----
>
> I tried 4 different C++ compilers (gnu, intel, pgi, pathscale):
>
> -----
> [23:19] svbu-mpi:~/tmp % g++ foo.cc -o foo && ./foo
> In my_function
> In my_function
> [23:21] svbu-mpi:~/tmp % icpc foo.cc -o foo && ./foo
> In my_function
> In my_function
> [23:21] svbu-mpi:~/tmp % pgCC foo.cc -o foo && ./foo
> In my_function
> In my_function
> [23:22] svbu-mpi:~/tmp % pathCC foo.cc -o foo && ./foo
> In my_function
> In my_function
> [23:22] svbu-mpi:~/tmp %
> ------
>
> So I think the proposal stands as it is written.
>
> --
> Jeff Squyres
> Cisco Systems
>
> _______________________________________________
> mpi-22 mailing list
> mpi-22_at_[hidden]
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-22
>
>
> _______________________________________________
> mpi-22 mailing list
> mpi-22_at_[hidden]
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-22
--
Jeff Squyres
Cisco Systems
More information about the Mpi-22
mailing list