Jason Merrill <ja...@redhat.com> writes: > Ah, of course, I was overlooking the assignment. The patch is OK.
Thanks. Here's a range diff with a few changes to the commits, chiefly in the commit messages. If you agree, I can push with these changes applied: 1: 32f810cca55 ! 1: d2e74525965 cp/coroutines: do not rewrite parameters in unevaluated contexts @@ Commit message parameters. Prevent this by simply skipping rewrites in unevaluated contexts. Those won't mind the value not being present anyway. + This prevents an ICE during parameter substitution. In the testcase + from the PR, the rewriting machinery finds a param in the body of the + coroutine, which it did not previously encounter while processing the + coroutine declaration, and that does not have a DECL_VALUE_EXPR, and + fails. + gcc/cp/ChangeLog: PR c++/111728 @@ gcc/cp/coroutines.cc: rewrite_param_uses (tree *stmt, int *do_subtree ATTRIBUTE_ + if (unevaluated_p (TREE_CODE (*stmt))) + { -+ *do_subtree = 0; // Nothing to do. ++ /* No odr-uses in unevaluated operands. */ ++ *do_subtree = 0; + return NULL_TREE; + } + 2: a16f1d34047 ! 2: adc77c732f5 cp+coroutines: teach convert_to_void to diagnose discarded co_awaits @@ Commit message as such, should inherit its nodiscard. A discarded co_await expression should, hence, act as if its call to await_resume was discarded. - CO_AWAIT_EXPR trees do conveniently contain the expression for calling - await_resume in them, so we can discard it. + This patch teaches convert_to_void how to discard 'through' a + CO_AWAIT_EXPR. When we discard a CO_AWAIT_EXPR, we can also just discard + the await_resume() call conveniently embedded within it. This results + in a [[nodiscard]] diagnostic that the PR noted was missing. gcc/cp/ChangeLog: Thanks again, have a lovely evening. -- Arsen Arsenović
signature.asc
Description: PGP signature