================ @@ -1332,6 +1332,54 @@ llvm::DIType *CGDebugInfo::CreateType(const TemplateSpecializationType *Ty, auto PP = getPrintingPolicy(); Ty->getTemplateName().print(OS, PP, TemplateName::Qualified::None); + SourceLocation Loc = AliasDecl->getLocation(); + + if (CGM.getCodeGenOpts().DebugTemplateAlias) { + // TemplateSpecializationType doesn't know if its template args are + // being substituted into a parameter pack. We can find out if that's + // the case now by inspecting the TypeAliasTemplateDecl template + // parameters. Insert Ty's template args into SpecArgs, bundling args + // passed to a parameter pack into a TemplateArgument::Pack. + SmallVector<TemplateArgument> SpecArgs; + { + ArrayRef SubstArgs = Ty->template_arguments(); + for (const NamedDecl *P : TD->getTemplateParameters()->asArray()) { + if (P->isParameterPack()) { + SpecArgs.push_back(TemplateArgument(SubstArgs)); + break; + } + // Skip defaulted args. + if (SubstArgs.empty()) { + // If SubstArgs is now empty (we're taking from it each iteration) and + // this template parameter isn't a pack, then that should mean we're + // using default values for the remaining template parameters. + break; ---------------- Michael137 wrote:
> lightly worried there are other template parameter kinds I've not thought of, > currently guarded by an llvm_unrecahable. Maybe there's something better to > do there - do you have any thoughts on this? The three kinds you check for should be sufficient afaik. Places around clang consistently only deal with these three types of parameter decls. https://github.com/llvm/llvm-project/pull/87623 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits