ChuanqiXu9 wrote:

> > As I said, I prefer to do this in Parser or Sema if possible.
> 
> Most of the logic is already in Sema in this version. This piece is at the 
> very end of funnel in FE. Hence I am asking about what mechanisms we can use 
> to obtain the `CallInst` or `InvokeInst` based on a known `CallExpr` during 
> CodeGen.

What I thought is, to touch the code that generates the CallExpr specially 
instead of marking a CallExpr as special after that. The later generally looks 
not good to me. 

For the later question, I roughly remember we can make it in several functions 
emitting CallExpr in CGExpr.cpp and CGExprCXX.cpp.

Also we should try to avoid touch so many CodeGen* files if possible. It looks 
scary at first and not easy to maintain.

> As for the name, what do you think about [[clang::coro_strict_elide]]?

For the current one, I prefer a more direct name `coro_elide_after_await`. It 
still looks confusing to understand what is `strict` for users.

> 
> > BTW, I am thinking about the safety issue. For example, one has coroutine 
> > type with the attribute, and the other has a coroutine type with this 
> > attribute too. Then how can we be sure the behavior is expected/well 
> > defined when a third user co_await a coroutine type within another one?
> 
> When you co_await a prvalue of Task2 from within Task1. The only way handles 
> gets passed from Task1 to Task2 (or vice versa) is through one of its 
> customization points (await_suspend, await_transform). The library needs to 
> ensure proper use of the handles. There shouldn't be anything the third 
> person cannot do because the Task types should not hand control of the handle 
> to the users.

What I am concerning is the potential misuses. e.g., we have a class marked 
with this attribute. But in the user's code, for whatever reasons (maybe 
introducing other coroutine types), the semantics of `co_awaiting` our class 
changes. It may be possible either due to new `operator co_await overloads` or 
due to the other `await_transform` didn't handle third party coroutine types 
well. After all, I think the conflict point is, it is the `awaiter` controls 
the behavior of `co_await` expression not the so-called coroutine types. So may 
be, if possible, I feel better if we can add the attribute to awaiters.

https://github.com/llvm/llvm-project/pull/94693
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to