
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Tuesday 15 April 2008 13:19 pm, Sebastian Redl wrote:
Peter Dimov wrote:
Note that N2179 doesn't require a copy to be made. If GCC allocates the exception objects on a heap - I have some recollections that it was doing that but I may be wrong - it might still be possible to implement current_exception to return a pointer to the active exception object... if there's a way to insert a reference count somewhere inside.
I took a larger stab at this, but I'm pretty much stumped right now. I can't abuse the reference count in __cxa_exception, because if I do, the handled exception stack won't be properly cleaned up.
I've never worked with compiler-internal kinds of things, but here's my attempt at a helpful suggestion. Instead of modifying the reference count, is it possible to do anything with the __cxa_exception::unwindHeader.exception_cleanup function pointer? Maybe you could replace it with something that doesn't actually destroy the exception object, and then have the exception_ptr take ownership. You also have access to the exception's destructor with the __cxa_exception::exceptionDestructor function pointer, although I think even if you replaced this with a null destructor, it would still free the memory for the exception object. - -- Frank -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFIBPLC5vihyNWuA4URAsrMAJ99mt85DsrRedUc/Bqr19CZsLaN6ACdFk6a vojRZ2JNmY+cm+dMwsNCT9c= =6g1K -----END PGP SIGNATURE-----