================
@@ -1000,45 +1014,46 @@ buildAssociatedConstraints(Sema &SemaRef,
FunctionTemplateDecl *F,
// We rebuild all template parameters with the uninstantiated depth, and
// build template arguments refer to them.
- SmallVector<TemplateArgument> AdjustedAliasTemplateArgs;
+ SmallVector<TemplateArgument> AdjustedAliasTemplateArgs(
+ AliasTemplate->getTemplateParameters()->size());
- for (auto *TP : *AliasTemplate->getTemplateParameters()) {
+ unsigned N = 0;
+ for (unsigned Index : DeducedAliasTemplateParams) {
+ auto *TP = AliasTemplate->getTemplateParameters()->getParam(Index);
// Rebuild any internal references to earlier parameters and reindex
// as we go.
MultiLevelTemplateArgumentList Args;
Args.setKind(TemplateSubstitutionKind::Rewrite);
Args.addOuterTemplateArguments(AdjustedAliasTemplateArgs);
NamedDecl *NewParam = transformTemplateParameter(
SemaRef, AliasTemplate->getDeclContext(), TP, Args,
- /*NewIndex=*/AdjustedAliasTemplateArgs.size(),
- getDepthAndIndex(TP).first + AdjustDepth);
+ /*NewIndex=*/N++, getDepthAndIndex(TP).first + AdjustDepth);
TemplateArgument NewTemplateArgument =
Context.getInjectedTemplateArg(NewParam);
- AdjustedAliasTemplateArgs.push_back(NewTemplateArgument);
+ AdjustedAliasTemplateArgs[Index] = NewTemplateArgument;
}
+
// Template arguments used to transform the template arguments in
// DeducedResults.
SmallVector<TemplateArgument> TemplateArgsForBuildingRC(
F->getTemplateParameters()->size());
// Transform the transformed template args
- MultiLevelTemplateArgumentList Args;
- Args.setKind(TemplateSubstitutionKind::Rewrite);
- Args.addOuterTemplateArguments(AdjustedAliasTemplateArgs);
+ MultiLevelTemplateArgumentList ArgsForDeducedParams;
+ ArgsForDeducedParams.setKind(TemplateSubstitutionKind::Rewrite);
+ ArgsForDeducedParams.addOuterTemplateArguments(AdjustedAliasTemplateArgs);
for (unsigned Index = 0; Index < DeduceResults.size(); ++Index) {
const auto &D = DeduceResults[Index];
- if (D.isNull()) { // non-deduced template parameters of f
+ if (IsNonDeducedArgument(D)) { // non-deduced template parameters of f
NamedDecl *TP = F->getTemplateParameters()->getParam(Index);
MultiLevelTemplateArgumentList Args;
Args.setKind(TemplateSubstitutionKind::Rewrite);
Args.addOuterTemplateArguments(TemplateArgsForBuildingRC);
// Rebuild the template parameter with updated depth and index.
- NamedDecl *NewParam =
- transformTemplateParameter(SemaRef, F->getDeclContext(), TP, Args,
- /*NewIndex=*/FirstUndeducedParamIdx,
- getDepthAndIndex(TP).first + AdjustDepth);
- FirstUndeducedParamIdx += 1;
+ NamedDecl *NewParam = transformTemplateParameter(
+ SemaRef, F->getDeclContext(), TP, Args,
+ /*NewIndex=*/N++, getDepthAndIndex(TP).first + AdjustDepth);
----------------
shafik wrote:
Interesting `N` does not get reset even though we are in a new loop.
https://github.com/llvm/llvm-project/pull/223340
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits