llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tools-extra Author: None (flovent) <details> <summary>Changes</summary> this PR fixs #<!-- -->126424 for `ArraySubScriptExpr`, `hasBase` Matcher will get right operand when it is not Integer type, but is not for sure that left operand is interger type. For the example code below `hasBase` will get `r` for the Subsequent matching and causing false positive. ``` template <typename R> int f(std::map<R*, int>& map, R* r) { return map[r]; } ``` so is needed to see if index is interger type to avoid this situation. --- Full diff: https://github.com/llvm/llvm-project/pull/127394.diff 3 Files Affected: - (modified) clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsPointerArithmeticCheck.cpp (+2-1) - (modified) clang-tools-extra/docs/ReleaseNotes.rst (+4) - (added) clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/pro-bounds-pointer-arithmetic-issue126424.cpp (+19) ``````````diff diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsPointerArithmeticCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsPointerArithmeticCheck.cpp index a1494a095f5b6..0d68790349fb5 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsPointerArithmeticCheck.cpp +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsPointerArithmeticCheck.cpp @@ -42,7 +42,8 @@ void ProBoundsPointerArithmeticCheck::registerMatchers(MatchFinder *Finder) { arraySubscriptExpr( hasBase(ignoringImpCasts( anyOf(AllPointerTypes, - hasType(decayedType(hasDecayedType(pointerType()))))))) + hasType(decayedType(hasDecayedType(pointerType())))))), + hasIndex(hasType(isInteger()))) .bind("expr"), this); } diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 6b8fe22242417..937d710fe6100 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -110,6 +110,10 @@ Changes in existing checks <clang-tidy/checks/misc/redundant-expression>` check by providing additional examples and fixing some macro related false positives. +- Improved :doc:`cppcoreguidelines-pro-bounds-pointer-arithmetic + <clang-tidy/checks/cppcoreguidelines/pro-bounds-pointer-arithmetic>` check by + fix false positives related to operator overloading and templates. + Removed checks ^^^^^^^^^^^^^^ diff --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/pro-bounds-pointer-arithmetic-issue126424.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/pro-bounds-pointer-arithmetic-issue126424.cpp new file mode 100644 index 0000000000000..b6b7a9664f38d --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/pro-bounds-pointer-arithmetic-issue126424.cpp @@ -0,0 +1,19 @@ +// RUN: %check_clang_tidy %s cppcoreguidelines-pro-bounds-pointer-arithmetic %t + +namespace std { +template <typename, typename> +class pair {}; + +template <typename Key, typename Value> +class map { + public: + using value_type = pair<Key, Value>; + value_type& operator[](const Key& key); + value_type& operator[](Key&& key); + }; +} + +template <typename R> +int f(std::map<R*, int>& map, R* r) { + return map[r]; // OK +} \ No newline at end of file `````````` </details> https://github.com/llvm/llvm-project/pull/127394 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits