llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tools-extra Author: Zeyi Xu (zeyi2) <details> <summary>Changes</summary> Fall back to getNameAsString() for named declarations without an IdentifierInfo, allowing unqualified patterns to match constructors, destructors, and operators. There shouldn't be a large performance problem, since the original identifier fast path is still kept. This is the matcher modification needed in #<!-- -->217479 --- Full diff: https://github.com/llvm/llvm-project/pull/230353.diff 3 Files Affected: - (modified) clang-tools-extra/clang-tidy/utils/Matchers.h (+11-8) - (modified) clang-tools-extra/docs/ReleaseNotes.md (+4) - (modified) clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-stringview-data-usage-options.cpp (-1) ``````````diff diff --git a/clang-tools-extra/clang-tidy/utils/Matchers.h b/clang-tools-extra/clang-tidy/utils/Matchers.h index e04da473226239..7263339213033c 100644 --- a/clang-tools-extra/clang-tidy/utils/Matchers.h +++ b/clang-tools-extra/clang-tidy/utils/Matchers.h @@ -74,9 +74,8 @@ AST_MATCHER(Expr, hasUnevaluatedContext) { return false; } -// A matcher implementation that matches a list of type name regular expressions -// against a NamedDecl. If a regular expression contains the substring "::" -// matching will occur against the qualified name, otherwise only the typename. +// A matcher implementation that matches a list of name regular expressions +// against a NamedDecl. class MatchesAnyListedRegexNameMatcher : public ast_matchers::internal::MatcherInterface<NamedDecl> { public: @@ -95,8 +94,8 @@ class MatchesAnyListedRegexNameMatcher // Match against the qualified name because the regular expression // contains ":" suggesting name and namespace should be matched. MatchQualified, - // Match against the fully qualified name because the regular expression - // starts with ":". + // Match against the qualified name prefixed with "::" because the regular + // expression starts with ":" or "^:". MatchFullyQualified, }; MatchMode Mode; @@ -114,6 +113,8 @@ class MatchesAnyListedRegexNameMatcher default: if (const IdentifierInfo *II = ND.getIdentifier()) return Regex.match(II->getName()); + if (ND.getDeclName()) + return Regex.match(ND.getNameAsString()); return false; } } @@ -139,9 +140,11 @@ class MatchesAnyListedRegexNameMatcher std::vector<NameMatcher> NameMatchers; }; -// Returns a matcher that matches NamedDecl's against a list of provided regular -// expressions. If a regular expression contains starts ':' the NamedDecl's -// qualified name will be used for matching, otherwise its name will be used. +// Returns a matcher that matches NamedDecls against a list of provided regular +// expressions. A regular expression starting with ":" or "^:" is matched +// against the qualified name prefixed with "::". A regular expression +// containing ":" is matched against the qualified name; otherwise, the +// unqualified name is used. inline ::clang::ast_matchers::internal::Matcher<NamedDecl> matchesAnyListedRegexName(llvm::ArrayRef<StringRef> NameList) { return ::clang::ast_matchers::internal::Matcher( diff --git a/clang-tools-extra/docs/ReleaseNotes.md b/clang-tools-extra/docs/ReleaseNotes.md index 41aa783cabd248..68efb68f201a5c 100644 --- a/clang-tools-extra/docs/ReleaseNotes.md +++ b/clang-tools-extra/docs/ReleaseNotes.md @@ -194,6 +194,10 @@ infrastructure are described first, followed by tool-specific sections. <clang-tidy/checks/bugprone/std-namespace-modification>` when checking lambda closure types used as template arguments. +- Improved {doc}`bugprone-suspicious-stringview-data-usage + <clang-tidy/checks/bugprone/suspicious-stringview-data-usage>` by allowing + unqualified patterns in the `AllowedCallees` option to match constructor names. + - Improved {doc}`cppcoreguidelines-missing-std-forward <clang-tidy/checks/cppcoreguidelines/missing-std-forward>` check by diagnosing unforwarded `auto&&` parameters in C++20 abbreviated function templates. diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-stringview-data-usage-options.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-stringview-data-usage-options.cpp index 5c1a7f4341f808..dad59aec933bd2 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-stringview-data-usage-options.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-stringview-data-usage-options.cpp @@ -29,7 +29,6 @@ void TestStringViewTypes(custom::StrView sv) { void TestAllowedCallees(custom::StrView sv) { safe_func(sv.data()); SafeClass sc(sv.data()); - // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: result of a `data()` call may not be null terminated, provide size information to the callee to prevent potential issues [bugprone-suspicious-stringview-data-usage] } void TestNotAllowed(custom::StrView sv) { `````````` </details> https://github.com/llvm/llvm-project/pull/230353 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
