unavoidable abort in mpz/realloc.c

Marc Glisse marc.glisse at inria.fr
Wed Mar 16 16:00:15 CET 2011

On Wed, 16 Mar 2011, Torbjorn Granlund wrote:

> I'd like to address the main problem, that of unwinding a call chain in
> GMP without leaking memory.
> Do people agree that setjmp/longjmp is the only mechanism available for
> unwinding the call chain?  I am not familiar with -fexceptions.  Does
> that allow for some (portable) neater mechanism?

If C++ code calls C code that calls C++ code that throws an exception, 
compiling the C code with -fexceptions/-funwind-tables allows that 
exception to propagate properly all the way back to the original C++ code.
I think it is supported at least by gcc, Intel and clang (it is even the 
default for clang on x86_64). I believe (but may be wrong) that microsoft 
always behaves like gcc -fexceptions.

That's for the portability aspect. What to do with it is another 
question... If you provide a way to replace abort with user functions, C++ 
programs can provide C++ functions that throw. But you can still get some 
leaks. You'd have to compile gmp as a C++ program (and -fexceptions 
becomes useless), with TMP_ALLOC using destructors, to solve that. But 
then it doesn't sound so different from setjmp/longjmp (except that it is 
more efficient), and I don't think you'd be happy with an option that only 
works when gmp is compiled as C++...

I have never looked at the internals of exception handling, so I don't 
know what it allows exactly (just making sure everyone knows I am just 
ranting ;-)

Hard indeed...

Marc Glisse

More information about the gmp-bugs mailing list