diff options
author | Eric Fiselier <eric@efcs.ca> | 2016-10-27 07:30:31 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2016-10-27 07:30:31 +0000 |
commit | 709d1b30ab9e649fc3e2485c1fa11f2f203e9482 (patch) | |
tree | 91a86f9bd809c120803fb1f3bf8eed53ca2758bb /llvm/lib/Target/AVR/Disassembler/AVRDisassembler.cpp | |
parent | ec47065795fd8ce007e168ebb886baf16a72fdfd (diff) | |
download | llvm-709d1b30ab9e649fc3e2485c1fa11f2f203e9482.zip llvm-709d1b30ab9e649fc3e2485c1fa11f2f203e9482.tar.gz llvm-709d1b30ab9e649fc3e2485c1fa11f2f203e9482.tar.bz2 |
[coroutines] Build fallthrough and set_exception statements.
Summary:
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.
Reviewers: majnemer, GorNishanov, rsmith
Subscribers: mehdi_amini, cfe-commits
Differential Revision: https://reviews.llvm.org/D25349
llvm-svn: 285271
Diffstat (limited to 'llvm/lib/Target/AVR/Disassembler/AVRDisassembler.cpp')
0 files changed, 0 insertions, 0 deletions