On Jun 29, 2012, at 8:17 AM, N.M. Maclaren wrote:
I don't think that I did, but it is a real issue. It is undefined behaviour of the worst kind to throw a C++ exception where there is a Fortran procedure in the call chain between the throw and the catch, and undefined behaviour of a seriously nasty kind when there is a C one.
So are you saying that even MPI::ERRORS_THROW_EXCEPTIONS was a bad idea? (Given that most [all?] MPI implementations are written in C)
This has two consequences:
1) You can't replace MPI_ERRORS_THROW_EXCEPTIONS by a user-written hander, and
2) You can't define MPI_ERRORS_THROW_EXCEPTIONS in even vaguely standard C or Fortran using user-written handlers.
Sorry, but that should be terminated with maximum prejudice. It always was well-defined only for pure C++ code.
[ The reason that it applies to C intermediates as well is that the C code may break the data structures used for the C++ stack unwinding. Most CURRENT compilers won't, but I have used ones that did, and it may well happen if you mix C and C++ compilers from different vendors, even today. ]
If we keep some form of MPI*ERRORS_THROW_EXCEPTIONS, perhaps we should add some possibility of it not being usable (e.g., for configurations where you can't safely throw a C++ exception through intermediate C code), like making MPI_ERRORS_THROW_EXCEPTIONS == MPI_ERRHANDLER_NULL, or some such...? -- Jeff Squyres [email protected] For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/
participants (1)
-
Jeff Squyres