Here's a minimal fix, without all the cleanup pre-patches.
CoreturnStmt needs to keep the operand value distinct from its use in
any return_value call, so that instantiation may rebuild the latter.
But it also needs to keep the operand value separate in the case of
calling return_void. Code generation checks the operand value form to
determine whether it is a distincte entity to the promise call. This
adds the same logic to CFG generation.
Can you rename the test something like thread-safety-coro.cpp? Looks great to me otherwise