================ @@ -7991,8 +7991,12 @@ Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) { // have C linkage. DeclContext *Ctx = S->getEntity(); if (Ctx && Ctx->isExternCContext()) { - Diag(TemplateParams->getTemplateLoc(), diag::err_template_linkage) - << TemplateParams->getSourceRange(); + SourceRange Range = + TemplateParams->getTemplateLoc().isInvalid() && TemplateParams->size() + ? TemplateParams->getParam(TemplateParams->size() - 1) + ->getSourceRange() ---------------- cor3ntin wrote:
I think using the first param would be better, yes (in the general case, you can have ```cpp template <typename> void f(auto); ``` so to establish if there are abbreviated parameters, you need to look at the first one, (and getTemplateLoc is always valid) but in the ```cpp void f(auto) ``` case, there are only abbreviated parameters, and you can point to the first one (and getTemplateLoc is never valid). Does that make sense? https://github.com/llvm/llvm-project/pull/129139 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits