================
@@ -149,7 +209,46 @@ CIRGenFunction::emitCoroutineBody(const CoroutineBodyStmt
&s) {
if (s.getReturnStmtOnAllocFailure())
cgm.errorNYI("handle coroutine return alloc failure");
- assert(!cir::MissingFeatures::generateDebugInfo());
- assert(!cir::MissingFeatures::emitBodyAndFallthrough());
+ {
+ assert(!cir::MissingFeatures::generateDebugInfo());
+ ParamReferenceReplacerRAII paramReplacer(localDeclMap);
+ // Create mapping between parameters and copy-params for coroutine
+ // function.
+ llvm::ArrayRef<const Stmt *> paramMoves = s.getParamMoves();
+ assert((paramMoves.size() == 0 || (paramMoves.size() == fnArgs.size())) &&
+ "ParamMoves and FnArgs should be the same size for coroutine "
+ "function");
+ // For zipping the arg map into debug info.
+ assert(!cir::MissingFeatures::generateDebugInfo());
+
+ // Create parameter copies. We do it before creating a promise, since an
+ // evolution of coroutine TS may allow promise constructor to observe
+ // parameter copies.
+ for (auto *pm : paramMoves) {
----------------
Andres-Salamanca wrote:
Yes, I added the missing feature here. Also, in the future, the EmitGroAlloca
function will mark the same metadata for name return value optimization.
https://github.com/llvm/llvm-project/pull/166683
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits