aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatheus Castanho <msc@linux.ibm.com>2020-01-17 11:44:54 -0300
committerTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>2020-01-17 21:02:13 -0300
commit9f8b135f76ac7943d1e108b7f6e816f526b2208c (patch)
tree37437279c14e847a9c4d9f42c6f4d1189cb40a8e
parentbe5c5315b95aaddcef38f1d3f4c526401076bd38 (diff)
downloadglibc-9f8b135f76ac7943d1e108b7f6e816f526b2208c.tar
glibc-9f8b135f76ac7943d1e108b7f6e816f526b2208c.tar.gz
glibc-9f8b135f76ac7943d1e108b7f6e816f526b2208c.tar.bz2
glibc-9f8b135f76ac7943d1e108b7f6e816f526b2208c.zip
Fix maybe-uninitialized error on powerpc
The build has been failing on powerpc64le-linux-gnu with GCC 10 due to a maybe-uninitialized error: ../sysdeps/ieee754/dbl-64/mpa.c:875:6: error: ‘w.e’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 875 | EY -= EX; | ^~ The warning is thrown because when __inv is called by __dvd *y is not initialized and if t == 0 before calling __dbl_mp, EY will stay uninitialized, as the function does not touch it in this case. However, since t will be set to 1/t before calling __dbl_mp, t == 0 will never happen, so we can instruct the compiler to ignore this case, which suppresses the warning. Tested on powerpc64le. Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
-rw-r--r--sysdeps/ieee754/dbl-64/mpa.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sysdeps/ieee754/dbl-64/mpa.c b/sysdeps/ieee754/dbl-64/mpa.c
index 3bb8bff90d..aed4354bac 100644
--- a/sysdeps/ieee754/dbl-64/mpa.c
+++ b/sysdeps/ieee754/dbl-64/mpa.c
@@ -871,6 +871,13 @@ __inv (const mp_no *x, mp_no *y, int p)
z.e = 0;
__mp_dbl (&z, &t, p);
t = 1 / t;
+
+ /* t == 0 will never happen at this point, since 1/t can only be 0 if t is
+ infinity, but before the division t == mantissa of x (exponent is 0). We
+ can instruct the compiler to ignore this case. */
+ if (t == 0)
+ __builtin_unreachable ();
+
__dbl_mp (t, y, p);
EY -= EX;