Skip to content
Snippets Groups Projects
Commit 5d9c9119 authored by Jason Merrill's avatar Jason Merrill
Browse files

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.
parent eeb92704
No related branches found
No related tags found
No related merge requests found
...@@ -592,6 +592,10 @@ PERSONALITY_FUNCTION (int version, ...@@ -592,6 +592,10 @@ PERSONALITY_FUNCTION (int version,
// Zero filter values are cleanups. // Zero filter values are cleanups.
saw_cleanup = true; 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) else if (ar_filter > 0)
{ {
// Positive filter values are handlers. // Positive filter values are handlers.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment