Hi Bin, Bin.Cheng <amker.ch...@gmail.com> wrote:
> Ping. We are seeking to clarify the standard wording around this (and the cases where unhandled_exception() returns - hopefully during the WG21 meeting this week, FWIW, I think your interpretation makes sense here. thanks Iain > > Thanks, > bin > > On Mon, Feb 3, 2020 at 1:55 PM bin.cheng <bin.ch...@linux.alibaba.com> wrote: >> Hi, >> >> Exception in coroutine is not correctly handled because the default >> return_void call is now inserted before the finish suspend point, >> rather than at the end of the original coroutine body. This patch >> fixes the issue by generating following code: >> co_await promise.initial_suspend(); >> try { >> // The original coroutine body >> >> promise.return_void(); // The default return_void call. >> } catch (...) { >> promise.unhandled_exception(); >> } >> final_suspend: >> // ... >> >> Bootstrap and test on x86_64. Is it OK? >> >> Thanks, >> bin >> >> gcc/cp >> 2020-02-03 Bin Cheng <bin.ch...@linux.alibaba.com> >> >> * coroutines.cc (build_actor_fn): Factor out code inserting the >> default return_void call to... >> (morph_fn_to_coro): ...here, also hoist local var declarations. >> >> gcc/testsuite >> 2020-02-03 Bin Cheng <bin.ch...@linux.alibaba.com> >> >> * g++.dg/coroutines/torture/co-ret-15-default-return_void.C: New.