[clang] [Clang] Fix Handling of Init Capture with Parameter Packs in LambdaScopeForCallOperatorInstantiationRAII (PR #100766)
Yanzuo Liu via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 9 09:10:54 PDT 2024
================
@@ -712,22 +712,30 @@ bool Sema::addInstantiatedCapturesToScope(
auto AddSingleCapture = [&](const ValueDecl *CapturedPattern,
unsigned Index) {
ValueDecl *CapturedVar = LambdaClass->getCapture(Index)->getCapturedVar();
- if (CapturedVar->isInitCapture())
- Scope.InstantiatedLocal(CapturedPattern, CapturedVar);
+ assert(CapturedVar->isInitCapture());
+ Scope.InstantiatedLocal(CapturedPattern, CapturedVar);
};
for (const LambdaCapture &CapturePattern : LambdaPattern->captures()) {
if (!CapturePattern.capturesVariable()) {
Instantiated++;
continue;
}
- const ValueDecl *CapturedPattern = CapturePattern.getCapturedVar();
+ ValueDecl *CapturedPattern = CapturePattern.getCapturedVar();
+
+ if (!CapturedPattern->isInitCapture()) {
+ continue;
+ }
+
if (!CapturedPattern->isParameterPack()) {
AddSingleCapture(CapturedPattern, Instantiated++);
} else {
Scope.MakeInstantiatedLocalArgPack(CapturedPattern);
- std::optional<unsigned> NumArgumentsInExpansion =
- getNumArgumentsInExpansion(CapturedPattern->getType(), TemplateArgs);
+ SmallVector<UnexpandedParameterPack, 2> Unexpanded;
+ SemaRef.collectUnexpandedParameterPacks(
+ dyn_cast<VarDecl>(CapturedPattern)->getInit(), Unexpanded);
----------------
zwuis wrote:
Why not use `cast`?
https://github.com/llvm/llvm-project/pull/100766
More information about the cfe-commits
mailing list