[Mpi-22] MPI::Grequest::Start proposal
    Jeff Squyres 
    jsquyres at [hidden]
       
    Thu Sep  4 01:26:23 CDT 2008
    
    
  
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
    
    
More information about the Mpi-22
mailing list