On Aug 9, 2011, at 1:52 PM, John McCall wrote:

> 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.

It is coming.  I'll get it in.

>  Is it
> really unreasonable to say that std::rethrow_exception can only rethrow
> a non-foreign exception?

I don't know the answer to this one.  I think we should try to keep the 
functionality of Apple's current abi, but deciphering exactly what that is is a 
non-trivial task.

Howard

> 
>> //  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.
> _______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to