[PATCH] D158006: [Clang][WIP]Experimental implementation of data member packs in dependent context.
Zenong Zhang via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 17 18:09:45 PDT 2023
SlaterLatiao marked 4 inline comments as done.
SlaterLatiao added inline comments.
================
Comment at: clang/lib/Sema/TreeTransform.h:4171
+ if (CXXDependentScopeMemberExpr *MemberExpr =
+ dyn_cast<CXXDependentScopeMemberExpr>(Pattern)) {
----------------
dblaikie wrote:
> Might be worth pulling out this new code as a separate function - the `continue` at the end is many lines away from the start or end of the loop, making control flow a bit hard to follow (probably the existing code could do with some of this massaging even before/regardless of the new code you're adding here)
Made the logic a separate function and added a comment to explain the `continue`.
================
Comment at: clang/lib/Sema/TreeTransform.h:4198-4199
+ MemberExpr->getMemberNameInfo().getInfo());
+ TemplateArgumentListInfo TemplateArgs = TemplateArgumentListInfo();
+ MemberExpr->copyTemplateArgumentsInto(TemplateArgs);
+ auto *ExpandedMemberExpr = CXXDependentScopeMemberExpr::Create(
----------------
denik wrote:
> Why is this in a loop?
Each field need to have its own `MemberAccessExpression`. This loop iterates through the expanded fields.
================
Comment at: clang/lib/Sema/TreeTransform.h:4208
+
+ Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(getSema(), Arg);
+ ExprResult Out = getDerived().TransformExpr(ExpandedMemberExpr);
----------------
denik wrote:
> Can we add a check that Arg never exceeds the number of arguments in the full expansion (is it Expansion->getNumExpansions()?)
`Expansion->getNumExpansions()` returns the number of expansions only when we know it. In this case it returns `std::nullopt`.
A more legit way to check `Arg` is to search for the specialization of the struct based on the template args of the current context, but I didn't find a proper way to achieve that.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D158006/new/
https://reviews.llvm.org/D158006
More information about the cfe-commits
mailing list