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.