[clang-tools-extra] a18634b - [clang-tidy] Never consider assignments as equivalent in `misc-redundant-expression` check
Fabian Wolff via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 12 07:08:13 PDT 2022
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;
+}
More information about the cfe-commits
mailing list