]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: diagnose usage of co_await and co_yield in default args [PR115906]
authorArsen Arsenović <arsen@aarsen.me>
Wed, 24 Jul 2024 23:00:02 +0000 (01:00 +0200)
committerArsen Arsenović <arsen@gcc.gnu.org>
Tue, 30 Jul 2024 11:44:13 +0000 (13:44 +0200)
commit0c382da0943dc7d14455ba2ada2f620a25bd1366
tree365b8e6e9f9d7ff3c94c996978425fa01016bd11
parenta362c9ca4ef6585e678f899705043a9aa10dd670
c++: diagnose usage of co_await and co_yield in default args [PR115906]

This is a partial fix for PR115906.  Per [expr.await] 2s3, "An
await-expression shall not appear in a default argument
([dcl.fct.default])".  This patch introduces the diagnostic in that
case, and in the case of a co_yield (as co_yield is defined in terms of
co_await, so prerequisites of co_await hold).

PR c++/115906 - [coroutines] missing diagnostic and ICE when co_await used as default argument in function declaration

gcc/cp/ChangeLog:

PR c++/115906
* parser.cc (cp_parser_unary_expression): Reject await
expressions if use of local variables is currently forbidden.
(cp_parser_yield_expression): Reject yield expressions if use of
local variables is currently forbidden.

gcc/testsuite/ChangeLog:

PR c++/115906
* g++.dg/coroutines/pr115906-yield.C: New test.
* g++.dg/coroutines/pr115906.C: New test.
* g++.dg/coroutines/co-await-syntax-02-outside-fn.C: Don't rely
on default arguments.
* g++.dg/coroutines/co-yield-syntax-01-outside-fn.C: Ditto.
gcc/cp/parser.cc
gcc/testsuite/g++.dg/coroutines/co-await-syntax-02-outside-fn.C
gcc/testsuite/g++.dg/coroutines/co-yield-syntax-01-outside-fn.C
gcc/testsuite/g++.dg/coroutines/pr115906-yield.C [new file with mode: 0644]
gcc/testsuite/g++.dg/coroutines/pr115906.C [new file with mode: 0644]