Dwarf Exception Handling question

Walter Bright via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 23 10:18:52 PST 2015


On 11/23/2015 10:07 AM, Iain Buclaw via Digitalmars-d wrote:
> Yes, the _d_dynamic_cast is redundant.  This happened because the EH pointer was
> treated as an Object, then upcasted to the catch type via the normal convert()
> routines.  This is what caused the unnecessary call to _d_dynamic_cast.
>
> This switch statement is generated by GCC itself, and it tries to be
> accommodating for all supported languages.  I imagine that the default case is
> there to support `catch(...)` in C++ code, however D has no notion of this
> construct, so what is instead generated is _Unwind_Resume to tell unwind to keep
> looking up the call chain.
>
> In other words, the default case should never really happen in D code except in
> the event of a logic bug in the unwind EH personality function (or possibly
> corruption). If you feel it more appropriate, I don't see the harm in replacing
> it with whatever HLT or abort instruction you like. :-)

Thanks, this helps a lot, and makes me a lot more comfortable with the notion 
that I understand what is going on. I won't generate the cast, then, and I'll 
use a HLT for the default.

BTW, are you working on supporting catching std::exception ?

My eevil plan is to get D exceptions working completely before trying to support 
std::exception.


More information about the Digitalmars-d mailing list