forked from OSchip/llvm-project
cfe9ccbddd
1. 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. 2. For an exception specification (`ttypeIndex < 0`), we can check `_UA_FORCE_UNWIND` first. 3. 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`. Reviewed By: #libc_abi, compnerd Differential Revision: https://reviews.llvm.org/D93190 |
||
---|---|---|
.. | ||
demangle | ||
include | ||
CMakeLists.txt | ||
abort_message.cpp | ||
abort_message.h | ||
cxa_aux_runtime.cpp | ||
cxa_default_handlers.cpp | ||
cxa_demangle.cpp | ||
cxa_exception.cpp | ||
cxa_exception.h | ||
cxa_exception_storage.cpp | ||
cxa_guard.cpp | ||
cxa_guard_impl.h | ||
cxa_handlers.cpp | ||
cxa_handlers.h | ||
cxa_noexception.cpp | ||
cxa_personality.cpp | ||
cxa_thread_atexit.cpp | ||
cxa_vector.cpp | ||
cxa_virtual.cpp | ||
fallback_malloc.cpp | ||
fallback_malloc.h | ||
private_typeinfo.cpp | ||
private_typeinfo.h | ||
stdlib_exception.cpp | ||
stdlib_new_delete.cpp | ||
stdlib_stdexcept.cpp | ||
stdlib_typeinfo.cpp |