diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2018-04-23 09:24:53 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2018-04-23 09:24:53 +0200 |
commit | 14184060bd2249a492ea44d36463914c421e6ce5 (patch) | |
tree | 1690f5eb1f75f61de371fc567640ade96317b854 /compilerplugins | |
parent | 0ada546b16be51f2b2ec430d99b5c44b9f1e00ad (diff) |
Don't warn about multiplication by zero in loplugin:expressionalwayszero
That specific warning (added with 862dc17e437f0972223e18555110dc875d2ffa44
"loplugin:expressionalwayszero improvements", together with other improvements)
already looked somewhat unhelpful to me in
4cb78942f25e9ea2e9a8445825438cd67b1c00f9 "loplugin:expressionalwayszero
(clang-cl)", but now started to generate
> [CXX] vcl/source/bitmap/BitmapSobelGreyFilter.cxx
> /data/sbergman/lo-clang2/core/vcl/source/bitmap/BitmapSobelGreyFilter.cxx:92:34: error: expression always evaluates to zero, lhs=0 rhs=unknown [loplugin:expressionalwayszero]
> nSum1 += nMask121 * nGrey12;
> ^~~~~~~~~~~~~~~~~~
> /data/sbergman/lo-clang2/core/vcl/source/bitmap/BitmapSobelGreyFilter.cxx:99:34: error: expression always evaluates to zero, lhs=0 rhs=unknown [loplugin:expressionalwayszero]
> nSum2 += nMask212 * nGrey21;
> ^~~~~~~~~~~~~~~~~~
> /data/sbergman/lo-clang2/core/vcl/source/bitmap/BitmapSobelGreyFilter.cxx:101:34: error: expression always evaluates to zero, lhs=0 rhs=unknown [loplugin:expressionalwayszero]
> nSum1 += nMask221 * nGrey22;
> ^~~~~~~~~~~~~~~~~~
> /data/sbergman/lo-clang2/core/vcl/source/bitmap/BitmapSobelGreyFilter.cxx:102:34: error: expression always evaluates to zero, lhs=0 rhs=unknown [loplugin:expressionalwayszero]
> nSum2 += nMask222 * nGrey22;
> ^~~~~~~~~~~~~~~~~~
> /data/sbergman/lo-clang2/core/vcl/source/bitmap/BitmapSobelGreyFilter.cxx:105:34: error: expression always evaluates to zero, lhs=0 rhs=unknown [loplugin:expressionalwayszero]
> nSum2 += nMask232 * nGrey23;
> ^~~~~~~~~~~~~~~~~~
> /data/sbergman/lo-clang2/core/vcl/source/bitmap/BitmapSobelGreyFilter.cxx:110:34: error: expression always evaluates to zero, lhs=0 rhs=unknown [loplugin:expressionalwayszero]
> nSum1 += nMask321 * nGrey32;
> ^~~~~~~~~~~~~~~~~~
> 6 errors generated.
(where all those nMask* are zero constants; and which even passed Gerrit/Jenkins
as loplugin:expressionalwayszero is only active for Clang >= 3.9). Lets just
remove that specific check again.
Change-Id: Ia8710f83b16d6e6949439d3941e17b8a0959aa8b
Diffstat (limited to 'compilerplugins')
-rw-r--r-- | compilerplugins/clang/expressionalwayszero.cxx | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/compilerplugins/clang/expressionalwayszero.cxx b/compilerplugins/clang/expressionalwayszero.cxx index 66e7c699a67a..6633f138cfb3 100644 --- a/compilerplugins/clang/expressionalwayszero.cxx +++ b/compilerplugins/clang/expressionalwayszero.cxx @@ -75,13 +75,8 @@ bool ExpressionAlwaysZero::VisitBinaryOperator( BinaryOperator const * binaryOpe if (binaryOperator->getLocStart().isMacroID()) return true; - bool bAndOperator = false; auto op = binaryOperator->getOpcode(); - if (op == BO_And || op == BO_AndAssign || op == BO_LAnd) - bAndOperator = true; - else if (op == BO_Mul || op == BO_MulAssign) - ; // ok - else + if (!(op == BO_And || op == BO_AndAssign || op == BO_LAnd)) return true; auto lhsValue = getExprValue(binaryOperator->getLHS()); @@ -90,9 +85,7 @@ bool ExpressionAlwaysZero::VisitBinaryOperator( BinaryOperator const * binaryOpe ; // ok else if (rhsValue && rhsValue->getExtValue() == 0) ; // ok - else if (bAndOperator && lhsValue && rhsValue && (lhsValue->getExtValue() & rhsValue->getExtValue()) == 0) - ; // ok - else if (!bAndOperator && lhsValue && rhsValue && (lhsValue->getExtValue() * rhsValue->getExtValue()) == 0) + else if (lhsValue && rhsValue && (lhsValue->getExtValue() & rhsValue->getExtValue()) == 0) ; // ok else return true; @@ -112,13 +105,8 @@ bool ExpressionAlwaysZero::VisitCXXOperatorCallExpr( CXXOperatorCallExpr const * if (cxxOperatorCallExpr->getLocStart().isMacroID()) return true; - bool bAndOperator = false; auto op = cxxOperatorCallExpr->getOperator(); - if ( op == OO_Amp || op == OO_AmpEqual || op == OO_AmpAmp) - bAndOperator = true; - else if (op == OO_Star || op == OO_StarEqual) - ; // ok - else + if ( !(op == OO_Amp || op == OO_AmpEqual || op == OO_AmpAmp)) return true; if (cxxOperatorCallExpr->getNumArgs() != 2) @@ -129,9 +117,7 @@ bool ExpressionAlwaysZero::VisitCXXOperatorCallExpr( CXXOperatorCallExpr const * ; // ok else if (rhsValue && rhsValue->getExtValue() == 0) ; // ok - else if (bAndOperator && lhsValue && rhsValue && (lhsValue->getExtValue() & rhsValue->getExtValue()) == 0) - ; // ok - else if (!bAndOperator && lhsValue && rhsValue && (lhsValue->getExtValue() * rhsValue->getExtValue()) == 0) + else if (lhsValue && rhsValue && (lhsValue->getExtValue() & rhsValue->getExtValue()) == 0) ; // ok else return true; |