mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-23 03:10:05 +00:00
Fix lgamma implementations for -Wuninitialized.
If you remove the "override CFLAGS += -Wno-uninitialized" in math/Makefile, you get errors from lgamma implementations of the form: ../sysdeps/ieee754/dbl-64/e_lgamma_r.c: In function '__ieee754_lgamma_r': ../sysdeps/ieee754/dbl-64/e_lgamma_r.c:297:13: error: 'nadj' may be used uninitialized in this function [-Werror=maybe-uninitialized] if(hx<0) r = nadj - r; This is one of the standard kinds of false positive uninitialized warnings: nadj is set under a certain condition, and then later used under the same condition. This patch uses DIAG_* macros to suppress the warning on the use of nadj. The ldbl-128 / ldbl-128ibm implementation has a substantially different structure that avoids this issue. Tested for x86_64. (In fact this patch eliminates the need for that -Wno-uninitialized on x86_64, but I want to test on more architectures before removing it.) * sysdeps/ieee754/dbl-64/e_lgamma_r.c: Include <libc-internal.h>. (__ieee754_lgamma_r): Ignore uninitialized warnings around use of NADJ. * sysdeps/ieee754/flt-32/e_lgammaf_r.c: Include <libc-internal.h>. (__ieee754_lgammaf_r): Ignore uninitialized warnings around use of NADJ. * sysdeps/ieee754/ldbl-96/e_lgammal_r.c: Include <libc-internal.h>. (__ieee754_lgammal_r): Ignore uninitialized warnings around use of NADJ.
This commit is contained in:
parent
89f3b6e18c
commit
9124ccf76a
10
ChangeLog
10
ChangeLog
@ -1,5 +1,15 @@
|
|||||||
2015-05-21 Joseph Myers <joseph@codesourcery.com>
|
2015-05-21 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
* sysdeps/ieee754/dbl-64/e_lgamma_r.c: Include <libc-internal.h>.
|
||||||
|
(__ieee754_lgamma_r): Ignore uninitialized warnings around use of
|
||||||
|
NADJ.
|
||||||
|
* sysdeps/ieee754/flt-32/e_lgammaf_r.c: Include <libc-internal.h>.
|
||||||
|
(__ieee754_lgammaf_r): Ignore uninitialized warnings around use of
|
||||||
|
NADJ.
|
||||||
|
* sysdeps/ieee754/ldbl-96/e_lgammal_r.c: Include <libc-internal.h>.
|
||||||
|
(__ieee754_lgammal_r): Ignore uninitialized warnings around use of
|
||||||
|
NADJ.
|
||||||
|
|
||||||
* sysdeps/ieee754/dbl-64/mpa.c (norm): Remove if condition on
|
* sysdeps/ieee754/dbl-64/mpa.c (norm): Remove if condition on
|
||||||
(p == 4) case.
|
(p == 4) case.
|
||||||
|
|
||||||
|
@ -77,6 +77,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <libc-internal.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <math_private.h>
|
#include <math_private.h>
|
||||||
|
|
||||||
@ -294,7 +295,18 @@ __ieee754_lgamma_r(double x, int *signgamp)
|
|||||||
} else
|
} else
|
||||||
/* 2**58 <= x <= inf */
|
/* 2**58 <= x <= inf */
|
||||||
r = x*(__ieee754_log(x)-one);
|
r = x*(__ieee754_log(x)-one);
|
||||||
|
/* NADJ is set for negative arguments 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 (4.9, "-Wmaybe-uninitialized");
|
||||||
|
#else
|
||||||
|
DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wuninitialized");
|
||||||
|
#endif
|
||||||
if(hx<0) r = nadj - r;
|
if(hx<0) r = nadj - r;
|
||||||
|
DIAG_POP_NEEDS_COMMENT;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
strong_alias (__ieee754_lgamma_r, __lgamma_r_finite)
|
strong_alias (__ieee754_lgamma_r, __lgamma_r_finite)
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
* ====================================================
|
* ====================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <libc-internal.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <math_private.h>
|
#include <math_private.h>
|
||||||
|
|
||||||
@ -229,7 +230,18 @@ __ieee754_lgammaf_r(float x, int *signgamp)
|
|||||||
} else
|
} else
|
||||||
/* 2**26 <= x <= inf */
|
/* 2**26 <= x <= inf */
|
||||||
r = x*(__ieee754_logf(x)-one);
|
r = x*(__ieee754_logf(x)-one);
|
||||||
|
/* NADJ is set for negative arguments 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 (4.9, "-Wmaybe-uninitialized");
|
||||||
|
#else
|
||||||
|
DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wuninitialized");
|
||||||
|
#endif
|
||||||
if(hx<0) r = nadj - r;
|
if(hx<0) r = nadj - r;
|
||||||
|
DIAG_POP_NEEDS_COMMENT;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
strong_alias (__ieee754_lgammaf_r, __lgammaf_r_finite)
|
strong_alias (__ieee754_lgammaf_r, __lgammaf_r_finite)
|
||||||
|
@ -91,6 +91,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <libc-internal.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <math_private.h>
|
#include <math_private.h>
|
||||||
|
|
||||||
@ -423,8 +424,18 @@ __ieee754_lgammal_r (long double x, int *signgamp)
|
|||||||
else
|
else
|
||||||
/* 2**66 <= x <= inf */
|
/* 2**66 <= x <= inf */
|
||||||
r = x * (__ieee754_logl (x) - one);
|
r = x * (__ieee754_logl (x) - one);
|
||||||
|
/* NADJ is set for negative arguments 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 (4.9, "-Wmaybe-uninitialized");
|
||||||
|
#else
|
||||||
|
DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wuninitialized");
|
||||||
|
#endif
|
||||||
if (se & 0x8000)
|
if (se & 0x8000)
|
||||||
r = nadj - r;
|
r = nadj - r;
|
||||||
|
DIAG_POP_NEEDS_COMMENT;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
strong_alias (__ieee754_lgammal_r, __lgammal_r_finite)
|
strong_alias (__ieee754_lgammal_r, __lgammal_r_finite)
|
||||||
|
Loading…
Reference in New Issue
Block a user