[PATCH Coroutines]Insert the default return_void call at correct position

Nathan Sidwell nathan@acm.org
Thu Feb 27 12:08:00 GMT 2020


On 2/3/20 12:55 AM, bin.cheng 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.cheng@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.cheng@linux.alibaba.com>
> 
>          * g++.dg/coroutines/torture/co-ret-15-default-return_void.C: New.

ok, thanks!

nathan

-- 
Nathan Sidwell



More information about the Gcc-patches mailing list