On Thursday, 10 April 2014 at 19:23:12 UTC, Jacob Carlborg wrote:
On 2014-04-10 08:53, deadalnix wrote:

The C++ personality function from GCC does not catch, but do the cleanup on foreign exceptions. That sound like the right behavior to me.

As far as I understand the cleaning is only a part of what personality function does. The first thing it does is check if the thrown exception can be handled. Like determine if it's a C++ exception or some other exception. If I recall correctly, it also determines if and where to resume unwinding, where to find catch blocks and so on.

This [1] series of blog posts gives a pretty good understanding of how C++ exceptions work under the hood, for those that don't want to read the ABI documentation.

[1] http://monoinfinito.wordpress.com/series/exception-handling-in-c/

You want to look at libstdc++-v3/libsupc++/eh_personality.cc in gcc's source code.

The personality function test if the exception is a C++ exception, in which case the regular flow apply. If not, the foreign_exception flag is set, and some behavior are altered. Basically, for what we are concerned with D, only cleanup will be executed (the filter part is irrelevant to D).

Reply via email to