llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tools-extra Author: Zinovy Nis (irishrover) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/183921.diff 2 Files Affected: - (modified) clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp (+24) - (modified) clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view.cpp (+7) ``````````diff diff --git a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp index 1dc4cc9856549..98e27d864bfee 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp @@ -21,6 +21,29 @@ using namespace clang::ast_matchers; namespace clang::tidy::modernize { +namespace { +AST_MATCHER(FunctionDecl, isOverloaded) { + DeclarationName Name = Node.getDeclName(); + const DeclContext *DC = Node.getDeclContext(); + // Skip lambda-like functions + if (Name.isEmpty()) + return false; + auto LookupResult = DC->lookup(Name); + size_t UniqueSignatures = 0; + llvm::SmallPtrSet<const FunctionDecl *, 2> SeenFunctions; + for (NamedDecl *ND : LookupResult) { + if (const auto *FD = dyn_cast<FunctionDecl>(ND)) { + if (SeenFunctions.insert(FD->getCanonicalDecl()).second) { + UniqueSignatures++; + if (UniqueSignatures > 1) + return true; + } + } + } + return false; +} +} // namespace + static constexpr StringRef StringViewClassKey = "string"; static constexpr StringRef WStringViewClassKey = "wstring"; static constexpr StringRef U8StringViewClassKey = "u8string"; @@ -81,6 +104,7 @@ void UseStringViewCheck::registerMatchers(MatchFinder *Finder) { functionDecl( isDefinition(), unless(anyOf(VirtualOrOperator, IgnoredFunctionsMatcher, + isOverloaded(), ast_matchers::isExplicitTemplateSpecialization())), returns(IsStdString), hasDescendant(returnStmt()), unless(hasDescendant(returnStmt(hasReturnValue(unless( diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view.cpp index 2a00a7200ee76..832af0c26ef70 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view.cpp @@ -365,6 +365,13 @@ std::string lambda() { }(); } +namespace overloads { +std::string dbl2str(double f); +std::string overload(int) { return "int"; } +std::string overload(double f) { return "f=" + dbl2str(f); } +std::string overload(std::string) { return "string"; } +} + struct TemplateString { static constexpr char* val = "TEMPLATE"; template<typename T> `````````` </details> https://github.com/llvm/llvm-project/pull/183921 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
