================
@@ -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:

I suppose you could call `EvaluateKnownConstInt` (on the TemplateArgument 
expression, if it's `!isValueDependent() && isIntegerConstantExpr()`, similar 
to what `templateArgumentExpressionsEqual` does). Maybe we can do this from 
within `CollectTemplateParams` where it asserts that the expression is a 
Constant?

I'm not actually sure how we get to the `TemplateArgument::Expression` case in 
`CollectTemplateParams` for constant expressions. AFAICT in the AST such 
expressions get evaluated into `TemplateArgument::Integral` before we ever get 
here. Seems like you're tripping over the assert now because you're calling 
`CollectTemplateParams` on the arguments to a `TemplateAliasDecl` which don't 
have their arguments evaluated in the front-end it looks like.

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

Reply via email to