Author: djasper Date: Wed Apr 20 04:48:56 2016 New Revision: 266866 URL: http://llvm.org/viewvc/llvm-project?rev=266866&view=rev Log: clang-tidy: [misc-unused-using-decls] Support template types.
This fixes llvm.org/PR27429. 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=266866&r1=266865&r2=266866&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/misc/UnusedUsingDeclsCheck.cpp Wed Apr 20 04:48:56 2016 @@ -20,8 +20,9 @@ namespace misc { void UnusedUsingDeclsCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher(usingDecl(isExpansionInMainFile()).bind("using"), this); - Finder->addMatcher(recordType(hasDeclaration(namedDecl().bind("used"))), - this); + auto DeclMatcher = hasDeclaration(namedDecl().bind("used")); + Finder->addMatcher(loc(recordType(DeclMatcher)), this); + Finder->addMatcher(loc(templateSpecializationType(DeclMatcher)), this); } void UnusedUsingDeclsCheck::check(const MatchFinder::MatchResult &Result) { @@ -34,7 +35,7 @@ void UnusedUsingDeclsCheck::check(const Using->shadow_begin()->getTargetDecl()->getCanonicalDecl(); // FIXME: Handle other target types. - if (!isa<RecordDecl>(TargetDecl)) + if (!isa<RecordDecl>(TargetDecl) && !isa<ClassTemplateDecl>(TargetDecl)) return; FoundDecls[TargetDecl] = Using; @@ -53,6 +54,9 @@ void UnusedUsingDeclsCheck::check(const // FIXME: This currently doesn't look at whether the type reference is // actually found with the help of the using declaration. if (const auto *Used = Result.Nodes.getNodeAs<NamedDecl>("used")) { + if (const auto *Specialization = + dyn_cast<ClassTemplateSpecializationDecl>(Used)) + Used = Specialization->getSpecializedTemplate(); auto I = FoundDecls.find(Used->getCanonicalDecl()); if (I != FoundDecls.end()) I->second = nullptr; 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=266866&r1=266865&r2=266866&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 Apr 20 04:48:56 2016 @@ -8,6 +8,8 @@ class B; class C; class D; class D { public: static int i; }; +template <typename T> class E {}; +template <typename T> class F {}; } // ----- Using declarations ----- @@ -18,11 +20,16 @@ using n::A; // A using n::B; using n::C; using n::D; +using n::E; // E +// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: using decl 'E' is unused +// CHECK-FIXES: {{^}}// E +using n::F; // ----- Usages ----- void f(B b); void g() { vector<C> data; D::i = 1; + F<int> f; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits