================
@@ -848,7 +862,21 @@ ExprResult Sema::BuildUnresolvedCoawaitExpr(SourceLocation 
Loc, Expr *Operand,
   }
 
   auto *RD = Promise->getType()->getAsCXXRecordDecl();
-  auto *Transformed = Operand;
+  bool InplaceCall =
+      isCoroInplaceCall(Operand) &&
+      isAttributedCoroInplaceTask(
+          getCurFunctionDecl(/*AllowLambda=*/true)->getReturnType());
+
+  if (InplaceCall) {
+    if (auto *Temporary = dyn_cast<CXXBindTemporaryExpr>(Operand)) {
----------------
ChuanqiXu9 wrote:

This is not correct at least it didn't handle `MaterializeTemporaryExpr` and I 
believe there are other patterns. I always don't like such pattern matches in 
AST. 

The ideal solution in my mind is to handle this in parser. But that may be a 
too big change.

Maybe what we can do  here  is:

```
if (auto *Call = dyn_cast<CallExpr>(Operand->IgnoreImplicit()))
   Call->setCoroMustElide();
```

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

Reply via email to