[PATCH] D142077: [Clang][SemaCXX][Coroutines] Fix misleading diagnostics with -Wunsequenced
Bruno Cardoso Lopes via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 3 12:33:28 PST 2023
bruno added a comment.
Thanks for the review, will push once all tests pass!
================
Comment at: clang/lib/Sema/SemaChecking.cpp:15186
+ if (ChildExpr == CSE->getOperand())
+ // Do not recurse over a CoroutineSuspendExpr's operand.
+ // The operand is also a subexpression of getCommonExpr(), and
----------------
ChuanqiXu wrote:
> nridge wrote:
> > Out of curiosity, since `getCommonExpr()` is itself a subexpression of `getReadyExpr()`, `getSuspendExpr()`, and `getResumeExpr()` (which are also children of the `CoroutineSuspendExpr`), shouldn't `getCommonExpr()` be skipped for the same reason?
> > since getCommonExpr() is itself a subexpression of getReadyExpr(), getSuspendExpr(), and getResumeExpr()
>
> This looks not true. For this example:
>
> ```
> co_await foo();
> ```
>
> `foo()` is the Operand. And the Common is `auto __tmp__ = operator co_await(foo())`. ReadyExpr should be `__tmp__.await_ready();`. SuspendExpr should be `__tmp__.await_suspend();` and ResumeExpr should be `__tmp__.await_resume();`.
>
> So the method here looks good to me.
> `foo()` is the Operand. And the Common is `auto __tmp__ = operator co_await(foo())`. ReadyExpr should be `__tmp__.await_ready();`. SuspendExpr should be `__tmp__.await_suspend();` and ResumeExpr should be `__tmp__.await_resume();`.
Exactly!
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D142077/new/
https://reviews.llvm.org/D142077
More information about the cfe-commits
mailing list