Index: clang-tidy/misc/UnusedUsingDeclsCheck.cpp =================================================================== --- clang-tidy/misc/UnusedUsingDeclsCheck.cpp +++ clang-tidy/misc/UnusedUsingDeclsCheck.cpp @@ -18,6 +18,11 @@ namespace tidy { namespace misc { +namespace { +// FIXME: Move this node matcher to ASTMatcher. +const internal::VariadicDynCastAllOfMatcher enumType; +} // namespace + // A function that helps to tell whether a TargetDecl in a UsingDecl will be // checked. Only variable, function, function template, class template, class, // enum declaration and enum constant declaration are considered. @@ -31,6 +36,7 @@ void UnusedUsingDeclsCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher(usingDecl(isExpansionInMainFile()).bind("using"), this); auto DeclMatcher = hasDeclaration(namedDecl().bind("used")); + Finder->addMatcher(loc(enumType(DeclMatcher)), this); Finder->addMatcher(loc(recordType(DeclMatcher)), this); Finder->addMatcher(loc(templateSpecializationType(DeclMatcher)), this); Finder->addMatcher(declRefExpr().bind("used"), this); @@ -94,6 +100,8 @@ removeFromFoundDecls(VD); } else if (const auto *ECD = dyn_cast(DRE->getDecl())) { removeFromFoundDecls(ECD); + if (const auto *ET = ECD->getType()->getAs()) + removeFromFoundDecls(ET->getDecl()); } } // Check the uninstantiated template function usage. Index: test/clang-tidy/misc-unused-using-decls.cpp =================================================================== --- test/clang-tidy/misc-unused-using-decls.cpp +++ test/clang-tidy/misc-unused-using-decls.cpp @@ -44,11 +44,13 @@ extern ostream cout; ostream &endl(ostream &os); -enum Color { - Green, - Red, - Yellow -}; +enum Color1 { Green }; + +enum Color2 { Red }; + +enum Color3 { Yellow }; + +enum Color4 { Blue }; } // namespace n @@ -126,11 +128,11 @@ using n::H; } -using n::Color; -// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: using decl 'Color' is unused -using n::Green; -// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: using decl 'Green' is unused -using n::Red; +using n::Color1; +// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: using decl 'Color1' is unused +using n::Color2; +using n::Color3; +using n::Blue; // ----- Usages ----- void f(B b); @@ -144,5 +146,7 @@ UsedFunc(); UsedTemplateFunc(); cout << endl; - int t = Red; + Color2 color2; + int t1 = Color3::Yellow; + int t2 = Blue; }