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(Left)->getOpcode() == cast(Right)->getOpcode(); case Stmt::BinaryOperatorClass: + if (cast(Left)->isAssignmentOp()) + return false; return cast(Left)->getOpcode() == cast(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; +}