[PATCH] D25437: [clang-tidy] Fix template agrument false positives in unused-using-decls.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 11 07:47:30 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL283879: [clang-tidy] Fix template agrument false positives in unused-using-decls. (authored by hokein).
Changed prior to commit:
https://reviews.llvm.org/D25437?vs=74239&id=74254#toc
Repository:
rL LLVM
https://reviews.llvm.org/D25437
Files:
clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
clang-tools-extra/trunk/test/clang-tidy/misc-unused-using-decls.cpp
Index: clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
===================================================================
--- clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
+++ clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
@@ -42,6 +42,8 @@
anyOf(refersToTemplate(templateName().bind("used")),
refersToDeclaration(functionDecl().bind("used"))))))),
this);
+ Finder->addMatcher(loc(templateSpecializationType(
+ hasAnyTemplateArgument(templateArgument().bind("used")))), this);
}
void UnusedUsingDeclsCheck::check(const MatchFinder::MatchResult &Result) {
@@ -91,6 +93,18 @@
return;
}
+ if (const auto *Used = Result.Nodes.getNodeAs<TemplateArgument>("used")) {
+ // FIXME: Support non-type template parameters.
+ if (Used->getKind() == TemplateArgument::Template) {
+ if (const auto *TD = Used->getAsTemplate().getAsTemplateDecl())
+ removeFromFoundDecls(TD);
+ } else if (Used->getKind() == TemplateArgument::Type) {
+ if (auto *RD = Used->getAsType()->getAsCXXRecordDecl())
+ removeFromFoundDecls(RD);
+ }
+ return;
+ }
+
if (const auto *Used = Result.Nodes.getNodeAs<TemplateName>("used")) {
removeFromFoundDecls(Used->getAsTemplateDecl());
return;
Index: clang-tools-extra/trunk/test/clang-tidy/misc-unused-using-decls.cpp
===================================================================
--- clang-tools-extra/trunk/test/clang-tidy/misc-unused-using-decls.cpp
+++ clang-tools-extra/trunk/test/clang-tidy/misc-unused-using-decls.cpp
@@ -21,6 +21,16 @@
class G;
class H;
+template <typename T> class K {};
+template <template <typename> class S>
+class L {};
+
+template <typename T> class M {};
+class N {};
+
+template <int T> class P {};
+const int Constant = 0;
+
class Base {
public:
void f();
@@ -150,6 +160,14 @@
using ns::AA;
using ns::ff;
+using n::K;
+
+using n::N;
+
+// FIXME: Currently non-type template arguments are not supported.
+using n::Constant;
+// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: using decl 'Constant' is unused
+
// ----- Usages -----
void f(B b);
void g() {
@@ -170,4 +188,16 @@
int t3 = 0;
a.func1<AA>(&t3);
a.func2<int, ff>(t3);
+
+ n::L<K> l;
}
+
+template<class T>
+void h(n::M<T>* t) {}
+// n::N is used the explicit template instantiation.
+template void h(n::M<N>* t);
+
+// Test on Non-type template arguments.
+template <int T>
+void i(n::P<T>* t) {}
+template void i(n::P<Constant>* t);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D25437.74254.patch
Type: text/x-patch
Size: 2531 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161011/e73f532a/attachment.bin>
More information about the cfe-commits
mailing list