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

Reply via email to