Author: Fabian Wolff Date: 2022-04-12T16:03:14+02:00 New Revision: a18634b74fc0ee1ca0d580cb5b71cd6807d18ce9
URL: https://github.com/llvm/llvm-project/commit/a18634b74fc0ee1ca0d580cb5b71cd6807d18ce9 DIFF: https://github.com/llvm/llvm-project/commit/a18634b74fc0ee1ca0d580cb5b71cd6807d18ce9.diff LOG: [clang-tidy] Never consider assignments as equivalent in `misc-redundant-expression` check Fixes https://github.com/llvm/llvm-project/issues/35853. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D122535 Added: Modified: clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp b/clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp index e68384348bd9c..5d30ad23a8531 100644 --- a/clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp @@ -134,6 +134,8 @@ static bool areEquivalentExpr(const Expr *Left, const Expr *Right) { return cast<UnaryOperator>(Left)->getOpcode() == cast<UnaryOperator>(Right)->getOpcode(); case Stmt::BinaryOperatorClass: + if (cast<BinaryOperator>(Left)->isAssignmentOp()) + return false; return cast<BinaryOperator>(Left)->getOpcode() == cast<BinaryOperator>(Right)->getOpcode(); case Stmt::UnaryExprOrTypeTraitExprClass: diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 11ed0e3ed2b66..870a043c6b813 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -132,7 +132,7 @@ Changes in existing checks the vector is a member of a structure. - Fixed a false positive in :doc:`readability-non-const-parameter - <clang-tidy/checks/readability-non-const-parameter>` when the parameter is referenced by an lvalue + <clang-tidy/checks/readability-non-const-parameter>` when the parameter is referenced by an lvalue. - Fixed a crash in :doc:`readability-const-return-type <clang-tidy/checks/readability-const-return-type>` when a pure virtual function @@ -150,6 +150,9 @@ Changes in existing checks Fixed an issue when there was already an initializer in the constructor and the check would try to create another initializer for the same member. +- Fixed a false positive in :doc:`misc-redundant-expression <clang-tidy/checks/misc-redundant-expression>` + involving assignments in conditions. This fixes `Issue 35853 <https://github.com/llvm/llvm-project/issues/35853>`_. + Removed checks ^^^^^^^^^^^^^^ diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp index 31fe8e0275b02..6597d05e44966 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp @@ -831,3 +831,15 @@ struct Bar2 { }; } // namespace no_crash + +int TestAssignSideEffect(int i) { + int k = i; + + if ((k = k + 1) != 1 || (k = k + 1) != 2) + return 0; + + if ((k = foo(0)) != 1 || (k = foo(0)) != 2) + return 1; + + return 2; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits