[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