forked from OSchip/llvm-project
[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
This commit is contained in:
parent
241c9a50b4
commit
7d4c23b349
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue