[clang-tools-extra] 7d4c23b - [clang-tidy] Fix a false positive about C++17 deduced class template types in unused-using-decl check.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 3 07:25:23 PST 2020
Author: Haojian Wu
Date: 2020-02-03T16:25:10+01:00
New Revision: 7d4c23b349f8d0575304182650850f2594935d7c
URL: https://github.com/llvm/llvm-project/commit/7d4c23b349f8d0575304182650850f2594935d7c
DIFF: https://github.com/llvm/llvm-project/commit/7d4c23b349f8d0575304182650850f2594935d7c.diff
LOG: [clang-tidy] Fix a false positive about C++17 deduced class template types in unused-using-decl check.
Reviewers: gribozavr2
Subscribers: xazax.hun, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D73876
Added:
clang-tools-extra/test/clang-tidy/checkers/misc-unused-using-decls-cxx17.cpp
Modified:
clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
index dafd32ed41c7..96055c29ffa8 100644
--- a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
@@ -38,6 +38,13 @@ AST_POLYMORPHIC_MATCHER_P(
*Builder = std::move(Result);
return Matched;
}
+
+AST_MATCHER_P(DeducedTemplateSpecializationType, refsToTemplatedDecl,
+ clang::ast_matchers::internal::Matcher<NamedDecl>, DeclMatcher) {
+ if (const auto *TD = Node.getTemplateName().getAsTemplateDecl())
+ return DeclMatcher.matches(*TD, Finder, Builder);
+ return false;
+}
} // namespace
// A function that helps to tell whether a TargetDecl in a UsingDecl will be
@@ -56,6 +63,9 @@ void UnusedUsingDeclsCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(loc(enumType(DeclMatcher)), this);
Finder->addMatcher(loc(recordType(DeclMatcher)), this);
Finder->addMatcher(loc(templateSpecializationType(DeclMatcher)), this);
+ Finder->addMatcher(loc(deducedTemplateSpecializationType(
+ refsToTemplatedDecl(namedDecl().bind("used")))),
+ this);
Finder->addMatcher(declRefExpr().bind("used"), this);
Finder->addMatcher(callExpr(callee(unresolvedLookupExpr().bind("used"))),
this);
diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc-unused-using-decls-cxx17.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc-unused-using-decls-cxx17.cpp
new file mode 100644
index 000000000000..ca17e44be8e6
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/misc-unused-using-decls-cxx17.cpp
@@ -0,0 +1,30 @@
+// RUN: %check_clang_tidy -std=c++17-or-later %s misc-unused-using-decls %t -- -- -fno-delayed-template-parsing -isystem %S/Inputs/
+
+namespace ns {
+
+template <typename T> class Foo {
+public:
+ Foo(T);
+};
+// Deduction guide (CTAD)
+template <typename T> Foo(T t) -> Foo<T>;
+
+template <typename T> class Bar {
+public:
+ Bar(T);
+};
+
+template <typename T> class Unused {};
+
+} // namespace ns
+
+using ns::Bar;
+using ns::Foo;
+using ns::Unused; // Unused
+// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: using decl 'Unused' is unused
+// CHECK-FIXES: {{^}}// Unused
+
+void f() {
+ Foo(123);
+ Bar(1);
+}
More information about the cfe-commits
mailing list