Author: Clement Courbet Date: 2024-06-25T07:53:44+02:00 New Revision: 8348d720ef913b0ff92b468be2eb9f4ea273cb5a
URL: https://github.com/llvm/llvm-project/commit/8348d720ef913b0ff92b468be2eb9f4ea273cb5a DIFF: https://github.com/llvm/llvm-project/commit/8348d720ef913b0ff92b468be2eb9f4ea273cb5a.diff LOG: [clang-tidy] Fix assert in performance-unnecessary-copy-init. (#96506) `GetDirectCallee` can be null. Fixes #96498. Added: Modified: clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/test/clang-tidy/checkers/performance/unnecessary-copy-initialization.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp b/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp index a6062ccf42230..106feb7fb4172 100644 --- a/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp +++ b/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp @@ -296,7 +296,7 @@ AST_MATCHER_P(DeclRefExpr, doesNotMutateObject, int, Indirections) { return false; } const auto *const Method = - dyn_cast<CXXMethodDecl>(OpCall->getDirectCallee()); + dyn_cast_or_null<CXXMethodDecl>(OpCall->getDirectCallee()); if (Method == nullptr) { // This is not a member operator. Typically, a friend operator. These diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 16fdc20eafd62..7fcf5cfbe3783 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -398,7 +398,7 @@ Changes in existing checks analyzed, so the check now handles the common patterns `const auto e = (*vector_ptr)[i]` and `const auto e = vector_ptr->at(i);`. Calls to mutable function where there exists a `const` overload are also - handled. + handled. Fix crash in the case of a non-member operator call. - Improved :doc:`readability-avoid-return-with-void-value <clang-tidy/checks/readability/avoid-return-with-void-value>` check by adding diff --git a/clang-tools-extra/test/clang-tidy/checkers/performance/unnecessary-copy-initialization.cpp b/clang-tools-extra/test/clang-tidy/checkers/performance/unnecessary-copy-initialization.cpp index f259552dc8f1d..d02bb98cf583c 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/performance/unnecessary-copy-initialization.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/performance/unnecessary-copy-initialization.cpp @@ -906,3 +906,12 @@ void negativeNonConstMemberExpr() { } } + +bool operator==(ExpensiveToCopyType, ExpensiveToCopyType); + +template<typename T> bool OperatorWithNoDirectCallee(T t) { + ExpensiveToCopyType a1; + ExpensiveToCopyType a2 = a1; + return a1 == t; +} + _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits