]> git.ipfire.org Git - thirdparty/gcc.git/commit
coroutines: Avoid functions with unlowered coroutine trees [PR95087].
authorIain Sandoe <iain@sandoe.co.uk>
Sun, 31 May 2020 19:30:10 +0000 (20:30 +0100)
committerIain Sandoe <iain@sandoe.co.uk>
Sun, 31 May 2020 19:48:09 +0000 (20:48 +0100)
commit1bb808504643e6c3c0df0fdd68a941ed2a64c7f0
treed4956b7cc16c35486c22497f2f76517b142632ea
parent7248bf60a27379c5f6bf863d7935f186b351580b
coroutines: Avoid functions with unlowered coroutine trees [PR95087].

Diagnosing bad uses of 'return' in coroutines is somewhat
tricky, since the user can use the keyword before we know
that the function is a coroutine (where such returns are not
permitted).  At present, we are just doing a check for any
use of 'return' and erroring on that.  However, we can't then
pass the function body on, since it will contain unlowered
coroutine trees.

This avoids the issue by dropping the entire function body
under that circumstance.  We could do better (for 11) but
this is intended to allow back-port of other fixes to 10.

gcc/cp/ChangeLog:

PR c++/95087
* coroutines.cc (morph_fn_to_coro): If we see an
early fatal error, drop the erroneous function body.

gcc/testsuite/ChangeLog:

PR c++/95087
* g++.dg/coroutines/co-return-syntax-08-bad-return.C:
Adjust the testcase to do the compile (rather than an
-fsyntax-only parse).
gcc/cp/coroutines.cc
gcc/testsuite/g++.dg/coroutines/co-return-syntax-08-bad-return.C