diff options
author | Matheus Castanho <msc@linux.ibm.com> | 2020-01-17 11:44:54 -0300 |
---|---|---|
committer | Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com> | 2020-01-17 21:02:13 -0300 |
commit | 9f8b135f76ac7943d1e108b7f6e816f526b2208c (patch) | |
tree | 37437279c14e847a9c4d9f42c6f4d1189cb40a8e | |
parent | be5c5315b95aaddcef38f1d3f4c526401076bd38 (diff) | |
download | glibc-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.c | 7 |
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; |