This revision was automatically updated to reflect the committed changes. Closed by commit rGa18634b74fc0: [clang-tidy] Never consider assignments as equivalent in `misc-redundant… (authored by fwolff).
Changed prior to commit: https://reviews.llvm.org/D122535?vs=418420&id=422222#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D122535/new/ https://reviews.llvm.org/D122535 Files: 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 Index: clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp +++ clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp @@ -831,3 +831,15 @@ }; } // 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; +} Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -132,7 +132,7 @@ 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 @@ 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 ^^^^^^^^^^^^^^ Index: clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp +++ clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp @@ -134,6 +134,8 @@ 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:
Index: clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp +++ clang-tools-extra/test/clang-tidy/checkers/misc-redundant-expression.cpp @@ -831,3 +831,15 @@ }; } // 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; +} Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -132,7 +132,7 @@ 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 @@ 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 ^^^^^^^^^^^^^^ Index: clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp +++ clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp @@ -134,6 +134,8 @@ 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:
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits