libstdc++: optimize EH phase 2
In the ABI's two-phase EH model, first we walk the stack looking for a handler, then we walk the stack running cleanups until we reach that handler. In the cleanup phase, we shouldn't redundantly check the handlers along the way, e.g. when walking through g(): void f() { throw 42; } void g() { try { f(); } catch (void *) { } } int main() { try { g(); } catch (int) { } } libstdc++-v3/ChangeLog: * libsupc++/eh_personality.cc (PERSONALITY_FUNCTION): Don't check handlers in the cleanup phase.
This commit is contained in:
parent
eeb9270496
commit
5d9c911907
1 changed files with 4 additions and 0 deletions
|
@ -592,6 +592,10 @@ PERSONALITY_FUNCTION (int version,
|
|||
// Zero filter values are cleanups.
|
||||
saw_cleanup = true;
|
||||
}
|
||||
else if (actions == _UA_CLEANUP_PHASE)
|
||||
// We checked the handlers in the search phase; if one of them
|
||||
// matched, actions would also have _UA_HANDLER_FRAME set.
|
||||
;
|
||||
else if (ar_filter > 0)
|
||||
{
|
||||
// Positive filter values are handlers.
|
||||
|
|
Loading…
Add table
Reference in a new issue