From e0846b7abe78e55bc1e959143d980208077b13ca Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Thu, 23 Nov 2017 10:39:41 +0200 Subject: loplugin:simplifybool can't invert conditions involving float types so revert some of the changes from commit 7a1c21e53fc4733a4bb52282ce0098fcc085ab0e loplugin:simplifybool for negation of comparison operator Change-Id: I937d575b86c1e418805d399b0dc16ae91876b4fe Reviewed-on: https://gerrit.libreoffice.org/45130 Reviewed-by: Noel Grandin Tested-by: Noel Grandin --- compilerplugins/clang/simplifybool.cxx | 4 ++++ compilerplugins/clang/test/simplifybool.cxx | 11 ++++++++++- filter/source/graphicfilter/icgm/class4.cxx | 4 ++-- sal/rtl/math.cxx | 2 +- svl/source/numbers/zformat.cxx | 2 +- tools/source/generic/b3dtrans.cxx | 4 ++-- 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/compilerplugins/clang/simplifybool.cxx b/compilerplugins/clang/simplifybool.cxx index 260946a5fd98..9167014f8c84 100644 --- a/compilerplugins/clang/simplifybool.cxx +++ b/compilerplugins/clang/simplifybool.cxx @@ -142,6 +142,10 @@ bool SimplifyBool::VisitUnaryLNot(UnaryOperator const * expr) { // RecordType would require more smarts - we'd need to verify that an inverted operator actually existed if (t->isTemplateTypeParmType() || t->isRecordType() || t->isDependentType()) return true; + // for floating point (with NaN) !(x=y + if (t->isFloatingType() || + binaryOp->getRHS()->IgnoreImpCasts()->getType()->getUnqualifiedDesugaredType()->isFloatingType()) + return true; if (!binaryOp->isComparisonOp()) return true; report( diff --git a/compilerplugins/clang/test/simplifybool.cxx b/compilerplugins/clang/test/simplifybool.cxx index e6b52c33f3b6..2cb2e810c110 100644 --- a/compilerplugins/clang/test/simplifybool.cxx +++ b/compilerplugins/clang/test/simplifybool.cxx @@ -15,7 +15,16 @@ void f1(int a, int b) } }; -// Consitently either warn about all or none of the below occurrences of "!!": +void f2(float a, float b) +{ + // no warning expected + if (!(a < b)) + { + a = b; + } +}; + +// Consistently either warn about all or none of the below occurrences of "!!": enum E1 { diff --git a/filter/source/graphicfilter/icgm/class4.cxx b/filter/source/graphicfilter/icgm/class4.cxx index 46f15e650c01..0185f699014c 100644 --- a/filter/source/graphicfilter/icgm/class4.cxx +++ b/filter/source/graphicfilter/icgm/class4.cxx @@ -395,7 +395,7 @@ void CGM::ImplDoClass4() fStartAngle = fEndAngle; fEndAngle = fG; } - if ( ( fInterAngle <= fStartAngle ) && ( fInterAngle < fEndAngle ) ) + if ( ! ( fInterAngle > fStartAngle ) && ( fInterAngle < fEndAngle ) ) { nSwitch ^=1; aIntermediatePoint = aEndingPoint; @@ -465,7 +465,7 @@ void CGM::ImplDoClass4() fStartAngle = fEndAngle; fEndAngle = fG; } - if ( ( fInterAngle <= fStartAngle ) && ( fInterAngle < fEndAngle ) ) + if ( ! ( fInterAngle > fStartAngle ) && ( fInterAngle < fEndAngle ) ) { aIntermediatePoint = aEndingPoint; aEndingPoint = aStartingPoint; diff --git a/sal/rtl/math.cxx b/sal/rtl/math.cxx index a9b30a4dc498..96c5843dcfea 100644 --- a/sal/rtl/math.cxx +++ b/sal/rtl/math.cxx @@ -170,7 +170,7 @@ bool isRepresentableInteger(double fAbsValue) // this here. double fInt; return (nInt <= kMaxInt && - (((fInt = static_cast< double >(nInt)) >= fAbsValue) && (fInt <= fAbsValue))); + (!((fInt = static_cast< double >(nInt)) < fAbsValue) && !(fInt > fAbsValue))); } return false; } diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx index 9a314d40b6aa..d3e48317f4d0 100644 --- a/svl/source/numbers/zformat.cxx +++ b/svl/source/numbers/zformat.cxx @@ -2368,7 +2368,7 @@ bool SvNumberformat::GetOutputString(double fNumber, { if (::rtl::math::isSignBitSet(fNumber)) { - if (fNumber >= 0.0) + if (!(fNumber < 0.0)) fNumber = -fNumber; // do not display -0.0 } if (fNumber == 0.0) diff --git a/tools/source/generic/b3dtrans.cxx b/tools/source/generic/b3dtrans.cxx index c65074482529..1162f24993f6 100644 --- a/tools/source/generic/b3dtrans.cxx +++ b/tools/source/generic/b3dtrans.cxx @@ -59,11 +59,11 @@ void B3dTransformationSet::Orientation(basegfx::B3DHomMatrix& rTarget, const bas void B3dTransformationSet::Frustum(basegfx::B3DHomMatrix& rTarget, double fLeft, double fRight, double fBottom, double fTop, double fNear, double fFar) { - if(fNear <= 0.0) + if(!(fNear > 0.0)) { fNear = 0.001; } - if(fFar <= 0.0) + if(!(fFar > 0.0)) { fFar = 1.0; } -- cgit