hokein created this revision. hokein added a reviewer: alexfh. hokein added a subscriber: cfe-commits.
We should check whether a UsingDecl is defined in macros or in class definition, not TargetDecls of the UsingDecl. http://reviews.llvm.org/D20666 Files: clang-tidy/misc/UnusedUsingDeclsCheck.cpp test/clang-tidy/misc-unused-using-decls.cpp 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 @@ -33,6 +33,7 @@ template <typename T> int UsedInTemplateFunc() { return 1; } void OverloadFunc(int); void OverloadFunc(double); +int FuncUsedByUsingDeclInMacro() { return 1; } class ostream { public: @@ -93,6 +94,11 @@ DEFINE_INT(test); #undef DEFIND_INT +#define USING_FUNC \ + using n::FuncUsedByUsingDeclInMacro; +USING_FUNC +#undef USING_FUNC + // ----- Usages ----- void f(B b); void g() { Index: clang-tidy/misc/UnusedUsingDeclsCheck.cpp =================================================================== --- clang-tidy/misc/UnusedUsingDeclsCheck.cpp +++ clang-tidy/misc/UnusedUsingDeclsCheck.cpp @@ -18,20 +18,10 @@ namespace tidy { namespace misc { -// A function that helps to tell whether a TargetDecl will be checked. -// We only check a TargetDecl if : -// * The corresponding UsingDecl is not defined in macros or in class -// definitions. -// * Only variable, function and class types are considered. +// A function that helps to tell whether a TargetDecl in a UsingDecl will be +// checked. Only variable, function, function template, class template and class +// are considered. static bool ShouldCheckDecl(const Decl *TargetDecl) { - // Ignores using-declarations defined in macros. - if (TargetDecl->getLocation().isMacroID()) - return false; - - // Ignores using-declarations defined in class definition. - if (isa<CXXRecordDecl>(TargetDecl->getDeclContext())) - return false; - return isa<RecordDecl>(TargetDecl) || isa<ClassTemplateDecl>(TargetDecl) || isa<FunctionDecl>(TargetDecl) || isa<VarDecl>(TargetDecl) || isa<FunctionTemplateDecl>(TargetDecl); @@ -49,6 +39,14 @@ void UnusedUsingDeclsCheck::check(const MatchFinder::MatchResult &Result) { if (const auto *Using = Result.Nodes.getNodeAs<UsingDecl>("using")) { + // Ignores using-declarations defined in macros. + if (Using->getLocation().isMacroID()) + return ; + + // Ignores using-declarations defined in class definition. + if (isa<CXXRecordDecl>(Using->getDeclContext())) + return ; + UsingDeclContext Context(Using); Context.UsingDeclRange = CharSourceRange::getCharRange( Using->getLocStart(),
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 @@ -33,6 +33,7 @@ template <typename T> int UsedInTemplateFunc() { return 1; } void OverloadFunc(int); void OverloadFunc(double); +int FuncUsedByUsingDeclInMacro() { return 1; } class ostream { public: @@ -93,6 +94,11 @@ DEFINE_INT(test); #undef DEFIND_INT +#define USING_FUNC \ + using n::FuncUsedByUsingDeclInMacro; +USING_FUNC +#undef USING_FUNC + // ----- Usages ----- void f(B b); void g() { Index: clang-tidy/misc/UnusedUsingDeclsCheck.cpp =================================================================== --- clang-tidy/misc/UnusedUsingDeclsCheck.cpp +++ clang-tidy/misc/UnusedUsingDeclsCheck.cpp @@ -18,20 +18,10 @@ namespace tidy { namespace misc { -// A function that helps to tell whether a TargetDecl will be checked. -// We only check a TargetDecl if : -// * The corresponding UsingDecl is not defined in macros or in class -// definitions. -// * Only variable, function and class types are considered. +// A function that helps to tell whether a TargetDecl in a UsingDecl will be +// checked. Only variable, function, function template, class template and class +// are considered. static bool ShouldCheckDecl(const Decl *TargetDecl) { - // Ignores using-declarations defined in macros. - if (TargetDecl->getLocation().isMacroID()) - return false; - - // Ignores using-declarations defined in class definition. - if (isa<CXXRecordDecl>(TargetDecl->getDeclContext())) - return false; - return isa<RecordDecl>(TargetDecl) || isa<ClassTemplateDecl>(TargetDecl) || isa<FunctionDecl>(TargetDecl) || isa<VarDecl>(TargetDecl) || isa<FunctionTemplateDecl>(TargetDecl); @@ -49,6 +39,14 @@ void UnusedUsingDeclsCheck::check(const MatchFinder::MatchResult &Result) { if (const auto *Using = Result.Nodes.getNodeAs<UsingDecl>("using")) { + // Ignores using-declarations defined in macros. + if (Using->getLocation().isMacroID()) + return ; + + // Ignores using-declarations defined in class definition. + if (isa<CXXRecordDecl>(Using->getDeclContext())) + return ; + UsingDeclContext Context(Using); Context.UsingDeclRange = CharSourceRange::getCharRange( Using->getLocStart(),
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits