mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-27 15:41:46 +00:00
4a294b5806
Previously we were not properly skipping the generation of the `try { }` block around the `init_suspend.await_resume()` if the `await_resume` is not returning void. The reason being that the resume expression was wrapped in a `CXXBindTemporaryExpr` and the first dyn_cast failed, silently ignoring the noexcept. This only mattered for `init_suspend` because it had its own try block. This patch changes to first extract the sub expression when we see a `CXXBindTemporaryExpr`. Then perform the same logic to check for `noexcept`. Another version of this patch also wanted to assert the second step by `cast<CXXMemberCallExpr>` and as far as I understand it should be a valid assumption. I can change to that if upstream prefers. |
||
---|---|---|
.. | ||
Inputs | ||
coro-aligned-alloc-2.cpp | ||
coro-aligned-alloc.cpp | ||
coro-alloc-2.cpp | ||
coro-alloc.cpp | ||
coro-always-inline.cpp | ||
coro-attributes.cpp | ||
coro-await-domination.cpp | ||
coro-await-resume-eh.cpp | ||
coro-await.cpp | ||
coro-awaiter-noinline-suspend.cpp | ||
coro-builtins-err.c | ||
coro-builtins.c | ||
coro-cleanup.cpp | ||
coro-dealloc.cpp | ||
coro-dest-slot.cpp | ||
coro-destructor-of-final_suspend.cpp | ||
coro-dwarf.cpp | ||
coro-eh-cleanup.cpp | ||
coro-elide.cpp | ||
coro-function-try-block.cpp | ||
coro-gro2.cpp | ||
coro-gro.cpp | ||
coro-halo.cpp | ||
coro-init-await-nontrivial-return.cpp | ||
coro-lambda.cpp | ||
coro-newpm-pipeline.cpp | ||
coro-only-destroy-when-complete.cpp | ||
coro-params.cpp | ||
coro-promise-dtor.cpp | ||
coro-ret-void.cpp | ||
coro-return-voidtype-initlist.cpp | ||
coro-return.cpp | ||
coro-symmetric-transfer-01.cpp | ||
coro-symmetric-transfer-02.cpp | ||
coro-symmetric-transfer-03.cpp | ||
coro-unhandled-exception.cpp | ||
microsoft-abi-operator-coawait.cpp | ||
pr56301.cpp | ||
pr56329.cpp | ||
pr56919.cpp | ||
pr59181.cpp | ||
pr59221.cpp | ||
pr59723.cpp | ||
pr65018.cpp | ||
pr65054.cpp |