[Mpi-forum] C++ issues
Jeff Squyres
jsquyres at cisco.com
Fri Jun 29 07:27:13 CDT 2012
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
jsquyres at cisco.com
For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/
More information about the mpi-forum
mailing list