diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-05-22 20:13:44 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-05-22 20:13:44 +0000 |
commit | 0c3717e7827969895f6ffe57c66e1612358ce6b1 (patch) | |
tree | 63515633144d67d549bc62b4681c59309a37dba0 /sysdeps/ieee754 | |
parent | 31a8780d0b41934c6ab5160f834f56a2d5d97f4a (diff) | |
download | glibc-0c3717e7827969895f6ffe57c66e1612358ce6b1.zip glibc-0c3717e7827969895f6ffe57c66e1612358ce6b1.tar.gz glibc-0c3717e7827969895f6ffe57c66e1612358ce6b1.tar.bz2 |
Fix ldbl-128 / ldbl-128ibm tanl for -Wuninitialized.
The ldbl-128 and ldbl-128ibm implementations of tanl produce
uninitialized variable warnings with -Wuninitialized because of a
variable that is initialized only conditionally, then used under the
same conditions under which it is set. This patch uses DIAG_* macros
to suppress those warnings.
Tested for powerpc and mips64.
* sysdeps/ieee754/ldbl-128/k_tanl.c: Include <libc-internal.h>.
(__kernel_tanl): Ignore uninitialized warnings around use of SIGN.
* sysdeps/ieee754/ldbl-128ibm/k_tanl.c: Include <libc-internal.h>.
(__kernel_tanl): Ignore uninitialized warnings around use of SIGN.
Diffstat (limited to 'sysdeps/ieee754')
-rw-r--r-- | sysdeps/ieee754/ldbl-128/k_tanl.c | 12 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/k_tanl.c | 12 |
2 files changed, 24 insertions, 0 deletions
diff --git a/sysdeps/ieee754/ldbl-128/k_tanl.c b/sysdeps/ieee754/ldbl-128/k_tanl.c index 140ce95..dfba2d9 100644 --- a/sysdeps/ieee754/ldbl-128/k_tanl.c +++ b/sysdeps/ieee754/ldbl-128/k_tanl.c @@ -56,6 +56,7 @@ * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) */ +#include <libc-internal.h> #include <math.h> #include <math_private.h> static const long double @@ -129,8 +130,19 @@ __kernel_tanl (long double x, long double y, int iy) { v = (long double) iy; w = (v - 2.0 * (x - (w * w / (w + v) - r))); + /* SIGN is set for arguments that reach this code, but not + otherwise, resulting in warnings that it may be used + uninitialized although in the cases where it is used it has + always been set. */ + DIAG_PUSH_NEEDS_COMMENT; +#if __GNUC_PREREQ (4, 7) + DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized"); +#else + DIAG_IGNORE_NEEDS_COMMENT (5, "-Wuninitialized"); +#endif if (sign < 0) w = -w; + DIAG_POP_NEEDS_COMMENT; return w; } if (iy == 1) diff --git a/sysdeps/ieee754/ldbl-128ibm/k_tanl.c b/sysdeps/ieee754/ldbl-128ibm/k_tanl.c index bcf8b5e..7f1caee 100644 --- a/sysdeps/ieee754/ldbl-128ibm/k_tanl.c +++ b/sysdeps/ieee754/ldbl-128ibm/k_tanl.c @@ -56,6 +56,7 @@ * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) */ +#include <libc-internal.h> #include <math.h> #include <math_private.h> static const long double @@ -129,8 +130,19 @@ __kernel_tanl (long double x, long double y, int iy) { v = (long double) iy; w = (v - 2.0 * (x - (w * w / (w + v) - r))); + /* SIGN is set for arguments that reach this code, but not + otherwise, resulting in warnings that it may be used + uninitialized although in the cases where it is used it has + always been set. */ + DIAG_PUSH_NEEDS_COMMENT; +#if __GNUC_PREREQ (4, 7) + DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized"); +#else + DIAG_IGNORE_NEEDS_COMMENT (5, "-Wuninitialized"); +#endif if (sign < 0) w = -w; + DIAG_POP_NEEDS_COMMENT; return w; } if (iy == 1) |