[clang-tools-extra] r269906 - [clang-tidy] Fix a template function false positive in misc-unused-using-decls check.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Wed May 18 04:49:35 PDT 2016
Author: hokein
Date: Wed May 18 06:49:34 2016
New Revision: 269906
URL: http://llvm.org/viewvc/llvm-project?rev=269906&view=rev
Log:
[clang-tidy] Fix a template function false positive in misc-unused-using-decls check.
Summary: Ignore warning uninstantiated template function usages.
Reviewers: djasper, alexfh
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D20326
Modified:
clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
clang-tools-extra/trunk/test/clang-tidy/misc-unused-using-decls.cpp
Modified: clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp?rev=269906&r1=269905&r2=269906&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp Wed May 18 06:49:34 2016
@@ -10,6 +10,7 @@
#include "UnusedUsingDeclsCheck.h"
#include "clang/AST/ASTContext.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/ASTMatchers/ASTMatchersInternal.h"
#include "clang/Lex/Lexer.h"
using namespace clang::ast_matchers;
@@ -18,12 +19,20 @@ namespace clang {
namespace tidy {
namespace misc {
+namespace {
+// FIXME: Move this node matcher to ASTMatcher.
+const internal::VariadicDynCastAllOfMatcher<Stmt, UnresolvedLookupExpr>
+ unresolvedLookupExpr;
+}
+
void UnusedUsingDeclsCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(usingDecl(isExpansionInMainFile()).bind("using"), this);
auto DeclMatcher = hasDeclaration(namedDecl().bind("used"));
Finder->addMatcher(loc(recordType(DeclMatcher)), this);
Finder->addMatcher(loc(templateSpecializationType(DeclMatcher)), this);
Finder->addMatcher(declRefExpr().bind("used"), this);
+ Finder->addMatcher(callExpr(callee(unresolvedLookupExpr().bind("used"))),
+ this);
}
void UnusedUsingDeclsCheck::check(const MatchFinder::MatchResult &Result) {
@@ -81,6 +90,13 @@ void UnusedUsingDeclsCheck::check(const
removeFromFoundDecls(VD);
}
}
+ // Check the uninstantiated template function usage.
+ if (const auto *ULE = Result.Nodes.getNodeAs<UnresolvedLookupExpr>("used")) {
+ for (const NamedDecl* ND : ULE->decls()) {
+ if (const auto *USD = dyn_cast<UsingShadowDecl>(ND))
+ removeFromFoundDecls(USD->getTargetDecl()->getCanonicalDecl());
+ }
+ }
}
void UnusedUsingDeclsCheck::removeFromFoundDecls(const Decl *D) {
Modified: clang-tools-extra/trunk/test/clang-tidy/misc-unused-using-decls.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/misc-unused-using-decls.cpp?rev=269906&r1=269905&r2=269906&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/misc-unused-using-decls.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/misc-unused-using-decls.cpp Wed May 18 06:49:34 2016
@@ -16,6 +16,7 @@ class I {
public:
static int ii;
};
+template <typename T> class J {};
class Base {
public:
@@ -29,6 +30,7 @@ int UsedFunc() { return 1; }
int UnusedFunc() { return 1; }
template <typename T> int UsedTemplateFunc() { return 1; }
template <typename T> int UnusedTemplateFunc() { return 1; }
+template <typename T> int UsedInTemplateFunc() { return 1; }
class ostream {
public:
@@ -70,6 +72,13 @@ using n::UnusedFunc; // UnusedFunc
using n::cout;
using n::endl;
+using n::UsedInTemplateFunc;
+using n::J;
+template <typename T> void Callee() {
+ J<T> j;
+ UsedInTemplateFunc<T>();
+}
+
#define DEFINE_INT(name) \
namespace INT { \
static const int _##name = 1; \
More information about the cfe-commits
mailing list