]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
math: Fix UB in ldbl-128 lrintl
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 5 May 2025 12:39:07 +0000 (09:39 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 8 May 2025 12:25:49 +0000 (09:25 -0300)
$ math/test-float128-llrint

UBSAN: Undefined behaviour in ../sysdeps/ieee754/float128/../ldbl-128/s_llrintl.c:83:31 left shift of 281474976710656 by 15 cannot be represented in type 'long long int'
Aborted

UBSAN: Undefined behaviour in ../sysdeps/ieee754/float128/../ldbl-128/s_lrintl.c:111:30 left shift of 281474976710656 by 15 cannot be represented in type 'long int'
Aborted

sysdeps/ieee754/ldbl-128/s_lrintl.c

index e5c0d5adb877e928c9921aef3068ea5a961a5287..210c47fb3bf76a82d59f4da6c065e056edc6d896 100644 (file)
@@ -81,7 +81,7 @@ __lrintl (_Float128 x)
          result = (j0 < 0 ? 0 : i0 >> (48 - j0));
        }
       else if (j0 >= 112)
-       result = ((long int) i0 << (j0 - 48)) | (i1 << (j0 - 112));
+       result = (i0 << (j0 - 48)) | (i1 << (j0 - 112));
       else
        {
 #if defined FE_INVALID || defined FE_INEXACT
@@ -108,7 +108,7 @@ __lrintl (_Float128 x)
          if (j0 == 48)
            result = (long int) i0;
          else
-           result = ((long int) i0 << (j0 - 48)) | (i1 >> (112 - j0));
+           result = (i0 << (j0 - 48)) | (i1 >> (112 - j0));
        }
     }
   else