All _URC_HANDLER_FOUND return values need to set landingPad
and its value does not matter for _URC_CONTINUE_UNWIND. So we
can always set landingPad to unify code.
For an exception specification (ttypeIndex < 0), we can check _UA_FORCE_UNWIND first.
The so-called type 3 search (actions & _UA_CLEANUP_PHASE && !(actions & _UA_HANDLER_FRAME))
is actually conceptually wrong. For a catch handler or an unmatched dynamic
exception specification, _UA_HANDLER_FOUND should be returned immediately. It
still appeared to work because the ttypeIndex==0 case would return
_UA_HANDLER_FOUND at a later time.
This patch fixes the conceptual error and simplifies the code by handling type 3
the same way as type 2 (which is also what libsupc++ does).
The only difference between phase 1 and phase 2 is what to do with a cleanup
(actionEntry==0, or a ttypeIndex==0 is found in the action record chain):
phase 1 returns _URC_CONTINUE_UNWIND while phase 2 returns _URC_HANDLER_FOUND.
For regular unwinding: if the search phase returns _URC_HANDLER_FOUND (catch (...) always matches), the cleanup phase will get _UA_HANDLER_FRAME and will match as well. The check here is dead.
For _UA_FORCE_UNWIND, there is no search phase. The code path is skipped.