[cfe-commits] [libcxxabi] r137118 - /libcxxabi/trunk/src/cxa_exception.cpp
John McCall
rjmccall at apple.com
Tue Aug 9 10:52:34 PDT 2011
On Aug 9, 2011, at 8:09 AM, Marshall Clow wrote:
> +static const uint64_t kOurDependentExceptionClass = 0x434C4E47432B2B01; // CLNGC++\1
Ugh. I would prefer to avoid Sebastian's dependent exception stuff. Is it
really unreasonable to say that std::rethrow_exception can only rethrow
a non-foreign exception?
> // Utility routines
> -static __cxa_exception *exception_from_object ( void *p ) {
> +static __cxa_exception *exception_from_thrown_object ( void *p ) throw () {
> return ((__cxa_exception *) p ) - 1;
> }
I know some of this code is not new in this patch, but please follow
the LLVM coding style. In particular, something like this should be
formatted:
static __cxa_exception *exception_from_thrown_object(void *p) throw () {
return ((__cxa_exception *) p) - 1;
}
> +void * __cxa_begin_catch(void * exceptionObject) throw() {
> + __cxa_eh_globals *globals = __cxa_get_globals ();
> + __cxa_exception *exception = exception_from_exception_object ( exceptionObject );
> +
> +// TODO add stuff for dependent exceptions.
> +
> +// TODO - should this be atomic?
> +// Increment the handler count, removing the flag about being rethrown
> +// assert ( exception->handlerCount != 0 );
> + exception->handlerCount = exception->handlerCount < 0 ?
> + -exception->handlerCount + 1 : exception->handlerCount + 1;
The answer is that yes, this does need to be atomic; in '0x, exceptions can be
rethrown on multiple threads.
I don't understand why this interaction is so complicated. Why doesn't this work:
_cxa_throw_exception initializes the reference count to 1
_cxa_begin_catch does not change the reference count
_cxa_rethrow increments the reference count
_cxa_end_catch decrements the reference count and deletes the exception
if the count reached 0.
The std::exception_ptr routines will also need to modify this reference count
somehow, but I'm not sure what those routines look like.
John.
More information about the cfe-commits
mailing list