[PATCH] D29877: Warn about unused static file scope function template declarations.

Richard Smith via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 13 13:56:01 PDT 2017


rsmith added inline comments.


================
Comment at: lib/Sema/Sema.cpp:472-477
+    // If this is a function template, we should remove if it has no
+    // specializations.
+    if (FunctionTemplateDecl *Template = FD->getDescribedFunctionTemplate()) {
+      if (std::distance(Template->spec_begin(), Template->spec_end()))
+        return true;
+    }
----------------
The comment doesn't match the code: you're removing function templates if they /do/ have specializations. And I think we should probably be walking the list of specializations and considering the template to be used if any specialization is used. That would affect a case like:

```
template<typename T> static void f() {}
template<> static void f<int>() {}
```

... where the primary template is still unused despite having a specialization.


================
Comment at: lib/Sema/Sema.cpp:492
 
   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
     // If a variable usable in constant expressions is referenced,
----------------
Should we do the same thing for variable templates?


================
Comment at: lib/Sema/SemaDecl.cpp:1496
         return false;
+      // 'static operator' functions are defined in headers; don't warn.
+      if (FD->isOverloadedOperator() &&
----------------
Why? Defining a static operator in a header sounds like a bug to me.


https://reviews.llvm.org/D29877





More information about the cfe-commits mailing list