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:
Joseph Myers 2015-05-21 23:44:33 +00:00
parent 89f3b6e18c
commit 9124ccf76a
4 changed files with 45 additions and 0 deletions

View File

@ -1,5 +1,15 @@
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
(p == 4) case.

View File

@ -77,6 +77,7 @@
*
*/
#include <libc-internal.h>
#include <math.h>
#include <math_private.h>
@ -294,7 +295,18 @@ __ieee754_lgamma_r(double x, int *signgamp)
} else
/* 2**58 <= x <= inf */
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;
DIAG_POP_NEEDS_COMMENT;
return r;
}
strong_alias (__ieee754_lgamma_r, __lgamma_r_finite)

View File

@ -13,6 +13,7 @@
* ====================================================
*/
#include <libc-internal.h>
#include <math.h>
#include <math_private.h>
@ -229,7 +230,18 @@ __ieee754_lgammaf_r(float x, int *signgamp)
} else
/* 2**26 <= x <= inf */
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;
DIAG_POP_NEEDS_COMMENT;
return r;
}
strong_alias (__ieee754_lgammaf_r, __lgammaf_r_finite)

View File

@ -91,6 +91,7 @@
*
*/
#include <libc-internal.h>
#include <math.h>
#include <math_private.h>
@ -423,8 +424,18 @@ __ieee754_lgammal_r (long double x, int *signgamp)
else
/* 2**66 <= x <= inf */
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)
r = nadj - r;
DIAG_POP_NEEDS_COMMENT;
return r;
}
strong_alias (__ieee754_lgammal_r, __lgammal_r_finite)