author | John McCall <rjmccall@apple.com> | |
Fri, 27 May 2011 18:34:38 +0000 (18:34 +0000) | ||
committer | John McCall <rjmccall@apple.com> | |
Fri, 27 May 2011 18:34:38 +0000 (18:34 +0000) | ||
commit | a3de16bc8f36638d5444e3e7b0112998af54f826 | |
tree | 347a748b21b29f74599252689782c948b28362ea | tree | snapshot (tar.xz tar.gz zip) |
parent | 11f6cc96bf794c7ede7bf8e24805f4187b24c549 | commit | diff |
Fix the inliner to maintain the current de facto invoke semantics:
- the selector for the landing pad must provide all available information
about the handlers, filters, and cleanups within that landing pad
- calls to _Unwind_Resume must be converted to branches to the enclosing
lpad so as to avoid re-entering the unwinder when the lpad claimed it
was going to handle the exception in some way
This is quite specific to libUnwind-based unwinding. In an effort to not
interfere too badly with other unwinders, and with existing hacks in frontends,
this only triggers on _Unwind_Resume (not _Unwind_Resume_or_Rethrow) and does
nothing with selectors if it cannot find a selector call for either lpad.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132200 91177308-0d34-0410-b5e6-96231b3b80d8
- the selector for the landing pad must provide all available information
about the handlers, filters, and cleanups within that landing pad
- calls to _Unwind_Resume must be converted to branches to the enclosing
lpad so as to avoid re-entering the unwinder when the lpad claimed it
was going to handle the exception in some way
This is quite specific to libUnwind-based unwinding. In an effort to not
interfere too badly with other unwinders, and with existing hacks in frontends,
this only triggers on _Unwind_Resume (not _Unwind_Resume_or_Rethrow) and does
nothing with selectors if it cannot find a selector call for either lpad.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132200 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Utils/InlineFunction.cpp | diff | blob | history | |
test/Transforms/Inline/inline_invoke.ll | [new file with mode: 0644] | blob |