[clang] [Clang] Fix -Wunused-parameter for implicit coroutine uses (PR #217518)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 21 19:02:34 PDT 2026
================
@@ -556,6 +562,7 @@ VarDecl *Sema::buildCoroutinePromise(SourceLocation Loc) {
VD->setInit(MaybeCreateExprWithCleanups(Result.get()));
VD->setInitStyle(VarDecl::CallInit);
CheckCompleteVariableDeclaration(VD);
+ markCoroutineParametersReferenced(*FD);
----------------
Lane0218 wrote:
Thanks for pointing this out.
`buildCoroutinePromise` passes the coroutine parameter copies (`q_i`) to the promise constructor. The references created for these arguments therefore mark the parameter copies in the coroutine frame, while `-Wunused-parameter` checks the original function parameters (`p_i`).
We only know that these copies are part of a valid promise-constructor call after `InitSeq.Perform` succeeds. Therefore, at that point, we propagate the referenced state back to the original parameters with `markCoroutineParametersReferenced(*FD)`.
We considered changing the reference bookkeeping for these temporary parameter-copy expressions, or changing the general `BuildDeclRefExpr` behavior. However, that would affect broader semantic analysis behavior and unnecessarily expand the scope of this PR. Keeping the adjustment at this coroutine-specific call site is more localized and avoids changing the existing reference-tracking contract.
I also added a comment at the call site to make this mapping explicit.
https://github.com/llvm/llvm-project/pull/217518
More information about the cfe-commits
mailing list