From 1f232abc8938cc1fe821a6a8504b3845bad89522 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 8 Aug 2012 11:04:18 +0000 Subject: Throughout, run newlib with -Wall -Werror option and fix bugs and compiler warnings found this way. * libc/stdio/freopen.c (_freopen_r): Fix bug setting _flags. * libc/include/stdio.h (_rename): Define when building newlib. * libc/include/sys/signal.h (_kill): Ditto. * libc/include/sys/stat.h (_mkdir): Ditto. * libc/include/sys/time.h (_gettimeofday): Ditto. * libc/include/sys/times.h (_times): Ditto. * libc/include/sys/wait.h (_wait): Ditto. * libc/locale/lmessages.c (empty): Don't define for Cygwin. * libc/locale/lmonetary.c (cnv): Ditto. * libc/locale/nl_langinfo.c (nl_langinfo): Ditto for variable s. * libc/posix/collate.c: Throughout cast to avoid compiler warning. * libc/posix/engine.c (matcher): Initialize dp to avoid compiler warning. * libc/posix/glob.c: Disable on Cygwin. Explain why. * libc/posix/regcomp.c: Fix "uninitialized" compiler warnings. (dissect): Deliberately silence gcc compiler warning. Add comment to explain why. * libc/posix/wordexp.c (wordexp): Remove num_bytes variable since result is never used. * libc/posix/popen.c (popen): Ditto for variable last. * libc/reent/mkdirr.c: Include sys/stat.h. * libc/reent/renamer.c: Include stdio.h. * libc/search/hash.c: Throughout use underscored variants of the stat function family. (init_hash): Add missing definition for the __USE_INTERNAL_STAT64 case. * libc/search/hash_bigkey.c (__big_insert): Add parenthesis to avoid compiler warning. * libc/search/hash_page.c (overflow_page): Initalize freep to NULL to avoid compiler warning. * libc/stdio/asiprintf.c (_asiprintf_r): Cast unsigned char * to char * to avoid compiler warning. (asiprintf): Ditto. * libc/stdio/asprintf.c (_asprintf_r): Ditto. (asprintf): Ditto. * libc/stdio/vasiprintf.c (_vasiprintf_r): Ditto. * libc/stdio/vasprintf.c (_vasprintf_r): Ditto. * libc/stdio/mktemp.c (_gettemp): Cast to unsigned char in call to isdigit to avoid compiler warning. * libc/stdio/vfprintf.c (_VFPRINTF_R): Initialize variables used for grouping to avoid compiler warning. Only define and set nseps and nrepeats if they are really used. * libc/stdio/vfwprintf.c (_VFWPRINTF_R): Ditto. Only define state if it is really used. * libc/stdio/vfscanf.c (u_char): Revert to be defined as unsigned char. (__SVFSCANF_R): Cast fmt in call to __mbtowc. * libc/stdlib/mbtowc_r.c (JIS_state_table): Disable when building Cygwin. (JIS_action_table): Ditto. * libc/stdlib/wctomb_r.c (__utf8_wctomb): Add parenthesis to avoid compiler warning. * libc/string/strcasestr.c: Deliberately silence gcc compiler warning. Add comment to explain why. * libc/time/strptime.c (strptime): Cast to unsigned char in calls to isspace to avoid compiler warning. * libm/math/e_atan2.c (__ieee754_atan2): Add parenthesis to avoid compiler warning. * libm/math/e_exp.c (__ieee754_exp): Initialize k to 0 to avoid compiler warning. Drop setting it to 0 later. * libm/math/ef_exp.c (__ieee754_expf): Ditto. * libm/math/e_pow.c (__ieee754_pow): Add braces to avoid compiler warning. * libm/math/ef_pow.c (__ieee754_powf): Ditto. * libm/math/er_lgamma.c (__ieee754_lgamma_r): Initialize nadj to 0 to avoid compiler warning. * libm/math/erf_lgamma.c (__ieee754_lgammaf_r): Ditto. * libm/math/e_rem_pio2.c (__ieee754_rem_pio2): Ditto for variable z. * libm/common/sf_round.c (roundf): Remove signbit variable since result is never used. --- newlib/libm/common/sf_round.c | 4 ---- newlib/libm/math/e_atan2.c | 2 +- newlib/libm/math/e_exp.c | 3 +-- newlib/libm/math/e_pow.c | 3 ++- newlib/libm/math/e_rem_pio2.c | 2 +- newlib/libm/math/ef_exp.c | 3 +-- newlib/libm/math/ef_pow.c | 3 ++- newlib/libm/math/er_lgamma.c | 2 +- newlib/libm/math/erf_lgamma.c | 2 +- 9 files changed, 10 insertions(+), 14 deletions(-) (limited to 'newlib/libm') diff --git a/newlib/libm/common/sf_round.c b/newlib/libm/common/sf_round.c index 1bf60890c..c8f1d7733 100644 --- a/newlib/libm/common/sf_round.c +++ b/newlib/libm/common/sf_round.c @@ -18,16 +18,12 @@ float x; #endif { - int signbit; __uint32_t w; /* Most significant word, least significant word. */ int exponent_less_127; GET_FLOAT_WORD(w, x); - /* Extract sign bit. */ - signbit = w & 0x80000000; - /* Extract exponent field. */ exponent_less_127 = (int)((w & 0x7f800000) >> 23) - 127; diff --git a/newlib/libm/math/e_atan2.c b/newlib/libm/math/e_atan2.c index 268be64a9..8e9650f29 100644 --- a/newlib/libm/math/e_atan2.c +++ b/newlib/libm/math/e_atan2.c @@ -73,7 +73,7 @@ pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */ if(((ix|((lx|-lx)>>31))>0x7ff00000)|| ((iy|((ly|-ly)>>31))>0x7ff00000)) /* x or y is NaN */ return x+y; - if((hx-0x3ff00000|lx)==0) return atan(y); /* x=1.0 */ + if(((hx-0x3ff00000)|lx)==0) return atan(y); /* x=1.0 */ m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */ /* when y = 0 */ diff --git a/newlib/libm/math/e_exp.c b/newlib/libm/math/e_exp.c index ce093c610..e7455eef6 100644 --- a/newlib/libm/math/e_exp.c +++ b/newlib/libm/math/e_exp.c @@ -109,7 +109,7 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */ #endif { double y,hi,lo,c,t; - __int32_t k,xsb; + __int32_t k = 0,xsb; __uint32_t hx; GET_HIGH_WORD(hx,x); @@ -144,7 +144,6 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */ else if(hx < 0x3e300000) { /* when |x|<2**-28 */ if(huge+x>one) return one+x;/* trigger inexact */ } - else k = 0; /* x is now in primary range */ t = x*x; diff --git a/newlib/libm/math/e_pow.c b/newlib/libm/math/e_pow.c index aac0b4211..cad6737a1 100644 --- a/newlib/libm/math/e_pow.c +++ b/newlib/libm/math/e_pow.c @@ -120,9 +120,10 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ /* x|y==NaN return NaN unless x==1 then return 1 */ if(ix > 0x7ff00000 || ((ix==0x7ff00000)&&(lx!=0)) || - iy > 0x7ff00000 || ((iy==0x7ff00000)&&(ly!=0))) + iy > 0x7ff00000 || ((iy==0x7ff00000)&&(ly!=0))) { if(((ix-0x3ff00000)|lx)==0) return one; else return nan(""); + } /* determine if y is an odd int when x < 0 * yisint = 0 ... y is not an integer diff --git a/newlib/libm/math/e_rem_pio2.c b/newlib/libm/math/e_rem_pio2.c index 3e5d0f7a2..ddfecba2d 100644 --- a/newlib/libm/math/e_rem_pio2.c +++ b/newlib/libm/math/e_rem_pio2.c @@ -89,7 +89,7 @@ pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */ double x,y[]; #endif { - double z,w,t,r,fn; + double z = 0.0,w,t,r,fn; double tx[3]; __int32_t i,j,n,ix,hx; int e0,nx; diff --git a/newlib/libm/math/ef_exp.c b/newlib/libm/math/ef_exp.c index 19c570cfd..6824f991a 100644 --- a/newlib/libm/math/ef_exp.c +++ b/newlib/libm/math/ef_exp.c @@ -47,7 +47,7 @@ P5 = 4.1381369442e-08; /* 0x3331bb4c */ #endif { float y,hi,lo,c,t; - __int32_t k,xsb,sx; + __int32_t k = 0,xsb,sx; __uint32_t hx; GET_FLOAT_WORD(sx,x); @@ -79,7 +79,6 @@ P5 = 4.1381369442e-08; /* 0x3331bb4c */ else if(hx < 0x31800000) { /* when |x|<2**-28 */ if(huge+x>one) return one+x;/* trigger inexact */ } - else k = 0; /* x is now in primary range */ t = x*x; diff --git a/newlib/libm/math/ef_pow.c b/newlib/libm/math/ef_pow.c index 6804ce45a..b3041dbdc 100644 --- a/newlib/libm/math/ef_pow.c +++ b/newlib/libm/math/ef_pow.c @@ -77,9 +77,10 @@ ivln2_l = 7.0526075433e-06; /* 0x36eca570 =1/ln2 tail*/ /* x|y==NaN return NaN unless x==1 then return 1 */ if(FLT_UWORD_IS_NAN(ix) || - FLT_UWORD_IS_NAN(iy)) + FLT_UWORD_IS_NAN(iy)) { if(ix==0x3f800000) return one; else return nanf(""); + } /* determine if y is an odd int when x < 0 * yisint = 0 ... y is not an integer diff --git a/newlib/libm/math/er_lgamma.c b/newlib/libm/math/er_lgamma.c index 7c9a153ed..386a8a73b 100644 --- a/newlib/libm/math/er_lgamma.c +++ b/newlib/libm/math/er_lgamma.c @@ -216,7 +216,7 @@ static double zero= 0.00000000000000000000e+00; double x; int *signgamp; #endif { - double t,y,z,nadj,p,p1,p2,p3,q,r,w; + double t,y,z,nadj = 0.0,p,p1,p2,p3,q,r,w; __int32_t i,hx,lx,ix; EXTRACT_WORDS(hx,lx,x); diff --git a/newlib/libm/math/erf_lgamma.c b/newlib/libm/math/erf_lgamma.c index 90cc5425d..3c6ba02af 100644 --- a/newlib/libm/math/erf_lgamma.c +++ b/newlib/libm/math/erf_lgamma.c @@ -151,7 +151,7 @@ static float zero= 0.0000000000e+00; float x; int *signgamp; #endif { - float t,y,z,nadj,p,p1,p2,p3,q,r,w; + float t,y,z,nadj = 0.0,p,p1,p2,p3,q,r,w; __int32_t i,hx,ix; GET_FLOAT_WORD(hx,x); -- cgit v1.2.3