diff options
| author | Szabolcs Nagy <nsz@port70.net> | 2012-12-14 12:49:35 +0100 | 
|---|---|---|
| committer | Szabolcs Nagy <nsz@port70.net> | 2012-12-14 12:49:35 +0100 | 
| commit | 934609442339edb21a33532ccefac8b78e6305f2 (patch) | |
| tree | 7e11b8280e7edbe789f9149936406d2a8596c6f0 | |
| parent | 0f53c1a4266ad4cca28115e2c3bcfdc86337d8ca (diff) | |
| download | musl-934609442339edb21a33532ccefac8b78e6305f2.tar.gz | |
fixed tgmath.h for functions with integral result
in tgmath.h the return values are casted to the appropriate
floating-point type (if the compiler supports gcc __typeof__),
this is wrong in case of ilogb, lrint, llrint, lround, llround
which do not need such cast
| -rw-r--r-- | include/tgmath.h | 16 | 
1 files changed, 9 insertions, 7 deletions
diff --git a/include/tgmath.h b/include/tgmath.h index 5b65e21f..832b052b 100644 --- a/include/tgmath.h +++ b/include/tgmath.h @@ -59,10 +59,12 @@ sizeof(double) == sizeof(long double)  /* function selection */ -#define __tg_real(fun, x) (__RETCAST(x)( \ +#define __tg_real_nocast(fun, x) ( \  	__FLT(x) ? fun ## f (x) : \  	__LDBL(x) ? fun ## l (x) : \ -	fun(x) )) +	fun(x) ) + +#define __tg_real(fun, x) (__RETCAST(x)__tg_real_nocast(fun, x))  #define __tg_real_2_1(fun, x, y) (__RETCAST(x)( \  	__FLT(x) ? fun ## f (x, y) : \ @@ -217,18 +219,18 @@ sizeof(double) == sizeof(long double)  #define fmod(x,y)       __tg_real_2(fmod, (x), (y))  #define frexp(x,y)      __tg_real_2_1(frexp, (x), (y))  #define hypot(x,y)      __tg_real_2(hypot, (x), (y)) -#define ilogb(x)        __tg_real(ilogb, (x)) +#define ilogb(x)        __tg_real_nocast(ilogb, (x))  #define ldexp(x,y)      __tg_real_2_1(ldexp, (x), (y))  #define lgamma(x)       __tg_real(lgamma, (x)) -#define llrint(x)       __tg_real(llrint, (x)) -#define llround(x)      __tg_real(llround, (x)) +#define llrint(x)       __tg_real_nocast(llrint, (x)) +#define llround(x)      __tg_real_nocast(llround, (x))  #define log(x)          __tg_real_complex(log, (x))  #define log10(x)        __tg_real(log10, (x))  #define log1p(x)        __tg_real(log1p, (x))  #define log2(x)         __tg_real(log2, (x))  #define logb(x)         __tg_real(logb, (x)) -#define lrint(x)        __tg_real(lrint, (x)) -#define lround(x)       __tg_real(lround, (x)) +#define lrint(x)        __tg_real_nocast(lrint, (x)) +#define lround(x)       __tg_real_nocast(lround, (x))  #define nearbyint(x)    __tg_real(nearbyint, (x))  #define nextafter(x,y)  __tg_real_2(nextafter, (x), (y))  #define nexttoward(x,y) __tg_real_2(nexttoward, (x), (y))  | 
