https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120243
--- Comment #1 from TC <rs2740 at gmail dot com> --- A similar example but with an initially suspended coroutine terminates at -O2 or highter. #include <coroutine> struct coro { struct promise_type { promise_type() = default; std::suspend_always initial_suspend() const noexcept { return {}; } std::suspend_always final_suspend() const noexcept { return {}; } void unhandled_exception() { throw; } coro get_return_object() { return {std::coroutine_handle<promise_type>::from_promise(*this)}; } void return_void() {} }; std::coroutine_handle<promise_type> h; }; int main() { auto c = []() -> coro { throw "hello"; __builtin_abort(); co_return; }; try { c().h.resume(); } catch(...) { __builtin_printf("Caught!\n"); } }