Hello Bin, Nathan,

Iain Sandoe <i...@sandoe.co.uk> wrote:


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.

It’s not clear if the committee will have time to process wording changes needed for this during the current session, however, it is agreed that injecting the return_void at the closing brace of the user’s original function (your solution) is the correct approach.

So, from my point of view this patch DTRT and should be applied,

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.


Reply via email to