This patch adds semantic checking and building of the fall-through co_return; statement as well as the p.set_exception(std::current_exception()) call for handling uncaught exceptions.
The fall-through statement is built and checked according to:
[dcl.fct.def.coroutine]/4
The unqualified-ids return_void and return_value are looked up in the scope of class P. If
both are found, the program is ill-formed. If the unqualified-id return_void is found, flowing
off the end of a coroutine is equivalent to a co_return with no operand. Otherwise, flowing off
the end of a coroutine results in undefined behavior.
Similarly the set_exception call is only built when that unqualified-id is found in the scope of class P.
Additionally this patch adds fall-through warnings for non-void returning coroutines. Since it's surprising undefined behavior I thought it would be important to add the warning right away.
const auto *