[Libreoffice-commits] core.git: sc/source

Stephan Bergmann (via logerrit) logerrit at kemper.freedesktop.org
Tue Aug 13 18:28:16 UTC 2019


 sc/source/core/tool/interpr2.cxx |    3 ++-
 sc/source/core/tool/math.cxx     |    5 ++++-
 sc/source/core/tool/rangeseq.cxx |    3 ++-
 3 files changed, 8 insertions(+), 3 deletions(-)

New commits:
commit 9c92c5e2a4bf15d673b5a8a2589b3109cb0603f7
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Tue Aug 13 15:51:51 2019 +0200
Commit:     Stephan Bergmann <sbergman at redhat.com>
CommitDate: Tue Aug 13 20:27:32 2019 +0200

    Fix Clang 10 -Werror,-Wimplicit-int-float-conversion
    
    > sc/source/core/tool/interpr2.cxx:2889:26: error: implicit conversion from 'sal_uLong' (aka 'unsigned long') to 'double' changes value from 18446744073709551615 to 18446744073709551616 [-Werror,-Wimplicit-int-float-conversion]
    >             if ( fVal <= sal_uLong(~0) )
    >                       ~~ ^~~~~~~~~~~~~
    
    > sc/source/core/tool/math.cxx:33:38: error: implicit conversion from 'sal_Int64' (aka 'long') to 'double' changes value from 9223372036854775807 to 9223372036854775808 [-Werror,-Wimplicit-int-float-conversion]
    >         if (f < SAL_MIN_INT64 || f > SAL_MAX_INT64)
    >                                    ~ ^~~~~~~~~~~~~
    
    > sc/source/core/tool/rangeseq.cxx:55:38: error: implicit conversion from 'long' to 'double' changes value from 9223372036854775807 to 9223372036854775808 [-Werror,-Wimplicit-int-float-conversion]
    >     if ( fInt >= LONG_MIN && fInt <= LONG_MAX )
    >                                   ~~ ^~~~~~~~
    
    Change-Id: I01942423e43956a42bef11b9ccc2e7cb53bd1596
    Reviewed-on: https://gerrit.libreoffice.org/77418
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx
index ac5f174f4425..c01061533f00 100644
--- a/sc/source/core/tool/interpr2.cxx
+++ b/sc/source/core/tool/interpr2.cxx
@@ -21,6 +21,7 @@
 #include <interpre.hxx>
 
 #include <comphelper/string.hxx>
+#include <o3tl/float_int_conversion.hxx>
 #include <sfx2/linkmgr.hxx>
 #include <sfx2/dispatch.hxx>
 #include <sfx2/objsh.hxx>
@@ -2886,7 +2887,7 @@ void ScInterpreter::ScBase()
             }
             sal_Unicode* p = pBuf + nBuf - 1;
             *p = 0;
-            if ( fVal <= sal_uLong(~0) )
+            if ( o3tl::convertsToAtMost(fVal, sal_uLong(~0)) )
             {
                 sal_uLong nVal = static_cast<sal_uLong>(fVal);
                 sal_uLong nBase = static_cast<sal_uLong>(fBase);
diff --git a/sc/source/core/tool/math.cxx b/sc/source/core/tool/math.cxx
index 73fbfcc29492..ffedee1514b5 100644
--- a/sc/source/core/tool/math.cxx
+++ b/sc/source/core/tool/math.cxx
@@ -12,6 +12,8 @@
 #include <cerrno>
 #include <cfenv>
 
+#include <o3tl/float_int_conversion.hxx>
+
 namespace sc {
 
 static double err_pow( const double& fVal1, const double& fVal2 )
@@ -30,7 +32,8 @@ double power( const double& fVal1, const double& fVal2 )
     if (fVal1 < 0 && fVal2 != 0.0)
     {
         const double f = 1.0 / fVal2 + ((fVal2 < 0.0) ? -0.5 : 0.5);
-        if (f < SAL_MIN_INT64 || f > SAL_MAX_INT64)
+        if (!(o3tl::convertsToAtLeast(f, SAL_MIN_INT64)
+              && o3tl::convertsToAtMost(f, SAL_MAX_INT64)))
         {
             // Casting to int would be undefined behaviour.
             fPow = err_pow( fVal1, fVal2);
diff --git a/sc/source/core/tool/rangeseq.cxx b/sc/source/core/tool/rangeseq.cxx
index 86b614b0853a..909f5f3af9bb 100644
--- a/sc/source/core/tool/rangeseq.cxx
+++ b/sc/source/core/tool/rangeseq.cxx
@@ -19,6 +19,7 @@
 
 #include <svl/zforlist.hxx>
 #include <rtl/math.hxx>
+#include <o3tl/float_int_conversion.hxx>
 #include <osl/diagnose.h>
 
 #include <com/sun/star/uno/Any.hxx>
@@ -52,7 +53,7 @@ static long lcl_DoubleToLong( double fVal )
 {
     double fInt = (fVal >= 0.0) ? ::rtl::math::approxFloor( fVal ) :
                                   ::rtl::math::approxCeil( fVal );
-    if ( fInt >= LONG_MIN && fInt <= LONG_MAX )
+    if ( o3tl::convertsToAtLeast(fInt, LONG_MIN) && o3tl::convertsToAtMost(fInt, LONG_MAX) )
         return static_cast<long>(fInt);
     else
         return 0;       // out of range


More information about the Libreoffice-commits mailing list