================
@@ -690,6 +690,23 @@ SmallVector<unsigned>
TemplateParamsReferencedInTemplateArgumentList(
SemaRef.MarkUsedTemplateParameters(
DeducedArgs, TemplateParamsList->getDepth(), ReferencedTemplateParams);
+ auto MarkDefaultArgs = [&](auto *Param) {
+ if (!Param || !Param->hasDefaultArgument())
+ return;
+ SemaRef.MarkUsedTemplateParameters(
+ Param->getDefaultArgument().getArgument(),
+ TemplateParamsList->getDepth(), ReferencedTemplateParams);
+ };
+
+ for (unsigned Index = 0; Index < TemplateParamsList->size(); ++Index) {
+ if (!ReferencedTemplateParams[Index])
+ continue;
+ auto *Param = TemplateParamsList->getParam(Index);
+ MarkDefaultArgs(dyn_cast<TemplateTypeParmDecl>(Param));
+ MarkDefaultArgs(dyn_cast<NonTypeTemplateParmDecl>(Param));
+ MarkDefaultArgs(dyn_cast<TemplateTemplateParmDecl>(Param));
+ }
+
----------------
zyn0217 wrote:
> I wonder if we are missing a step to get the converted template argument
> list, and should be calling this with that instead of the deduced arguments
> directly.
The fact that makes me think it sensible is, in the later template parameter
transform, we do retain/tranaform the default arguments. That means, the
transformed template parameters which has default arguments could end up
referring to anything that won't otherwise appear in the synthesized template
parameter list. And this is exactly where the issue raised.
Re the ConvertDeducedTemplateArguments, i think we probably want it, but I
couldn't immediately recall what job it does to handle default arguments.
https://github.com/llvm/llvm-project/pull/134807
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits