diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-08-06 13:32:43 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-08-14 18:03:06 +0200 |
commit | e67657d5211f6e95ddf8bd621108608573b00d5d (patch) | |
tree | 66724101dbd95721714bd40fcb4861663432774c /compilerplugins | |
parent | 186def8f48e273c3a3b4d23b3ab2efd0d8664731 (diff) |
loplugin:simplifybool more
look for expressions like
!(a && !b)
which can be expanded out
Change-Id: I72515a9638762b050f9a258c08da39ebfa2ef8e7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100579
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'compilerplugins')
-rw-r--r-- | compilerplugins/clang/simplifybool.cxx | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/compilerplugins/clang/simplifybool.cxx b/compilerplugins/clang/simplifybool.cxx index 89c262f54c98..d2e53d63aae9 100644 --- a/compilerplugins/clang/simplifybool.cxx +++ b/compilerplugins/clang/simplifybool.cxx @@ -293,11 +293,17 @@ bool SimplifyBool::VisitUnaryOperator(UnaryOperator const * expr) { } else if (binaryOp->isLogicalOp()) { - auto containsNegationOrComparison = [](Expr const * expr) { + // if we find a negation condition inside, it is definitely better + // to expand it out + bool foundLNot = false; + auto containsNegationOrComparison = [&](Expr const * expr) { expr = ignoreParenImpCastAndComma(expr); if (auto unaryOp = dyn_cast<UnaryOperator>(expr)) if (unaryOp->getOpcode() == UO_LNot) + { + foundLNot = true; return expr; + } if (auto binaryOp = dyn_cast<BinaryOperator>(expr)) if (binaryOp->isComparisonOp()) return expr; @@ -308,9 +314,7 @@ bool SimplifyBool::VisitUnaryOperator(UnaryOperator const * expr) { }; auto lhs = containsNegationOrComparison(binaryOp->getLHS()); auto rhs = containsNegationOrComparison(binaryOp->getRHS()); - if (!lhs || !rhs) - return true; - if (lhs || rhs) + if (foundLNot || (lhs && rhs)) report( DiagnosticsEngine::Warning, ("logical negation of logical op containing negation, can be simplified"), |