diff options
| -rw-r--r-- | clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.cpp | 3 | ||||
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/readability-simplify-bool-expr.cpp | 10 |
2 files changed, 13 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.cpp b/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.cpp index 559b085bef9..ba8e5b42cca 100644 --- a/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.cpp @@ -195,6 +195,9 @@ std::string compareExpressionToZero(const MatchFinder::MatchResult &Result, std::string replacementExpression(const MatchFinder::MatchResult &Result, bool Negated, const Expr *E) { E = E->ignoreParenBaseCasts(); + if (const auto *EC = dyn_cast<ExprWithCleanups>(E)) + E = EC->getSubExpr(); + const bool NeedsStaticCast = needsStaticCast(E); if (Negated) { if (const auto *UnOp = dyn_cast<UnaryOperator>(E)) { diff --git a/clang-tools-extra/test/clang-tidy/readability-simplify-bool-expr.cpp b/clang-tools-extra/test/clang-tidy/readability-simplify-bool-expr.cpp index edaf68e0c88..cd93c5d4be7 100644 --- a/clang-tools-extra/test/clang-tidy/readability-simplify-bool-expr.cpp +++ b/clang-tools-extra/test/clang-tidy/readability-simplify-bool-expr.cpp @@ -938,3 +938,13 @@ bool integer_member_implicit_cast(A *p) { } // CHECK-MESSAGES: :[[@LINE-5]]:12: warning: {{.*}} in conditional return // CHECK-FIXES: return p->m != 0;{{$}} + +bool operator!=(const A&, const A&) { return false; } +bool expr_with_cleanups(A &S) { + if (S != (A)S) + return false; + + return true; +} +// CHECK-MESSAGES: :[[@LINE-4]]:12: warning: {{.*}} in conditional return +// CHECK-FIXES: S == (A)S;{{$}} |

