[PATCH] D73876: [clang-tidy] Fix a false positive about C++17 deduced class template types in unused-using-decl check.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 3 07:44:04 PST 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG7d4c23b349f8: [clang-tidy] Fix a false positive about C++17 deduced class template types in… (authored by hokein).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D73876/new/
https://reviews.llvm.org/D73876
Files:
clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
clang-tools-extra/test/clang-tidy/checkers/misc-unused-using-decls-cxx17.cpp
Index: clang-tools-extra/test/clang-tidy/checkers/misc-unused-using-decls-cxx17.cpp
===================================================================
--- /dev/null
+++ 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);
+}
Index: clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
+++ clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
@@ -38,6 +38,13 @@
*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 @@
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);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D73876.242075.patch
Type: text/x-patch
Size: 2149 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200203/46b4caaa/attachment.bin>
More information about the cfe-commits
mailing list