|
Message-ID: <50CB22CD.1070208@ojab.ru> Date: Fri, 14 Dec 2012 16:59:57 +0400 From: ojab <ojab@...b.ru> To: musl@...ts.openwall.com Subject: Re: spandsp build, lrint/sqrt/pow issue On 14.12.2012 16:40, Szabolcs Nagy wrote: > * ojab <ojab@...b.ru> [2012-12-14 13:49:57 +0400]: >> spandsp library (which is used in FreeSWITCH/Asterisk/Yate/many >> commercial solutions/etc) build fails with (first error): >> >>> In file included from awgn.c:59:0: >>> spandsp/saturated.h: In function 'fsaturate': >>> spandsp/saturated.h:184:22: warning: cast to pointer from integer of different size >>> spandsp/saturated.h:184:22: warning: cast to pointer from integer of different size >>> spandsp/saturated.h:184:5: error: invalid use of void expression >> >> line 184 is return statement in >>> static __inline__ int16_t fsaturate(double damp) >>> { >>> if (damp > (double) INT16_MAX) >>> return INT16_MAX; >>> if (damp < (double) INT16_MIN) >>> return INT16_MIN; >>> return (int16_t) lrint(damp); >>> } > > this is a bug in musl's tgmath.h > (incorrectly casted the return value to a floating-point type) > > thanks for catching it, i pushed a fix to my math repo > (also attached) > >> awgn.i can be found in the attached file. The same errors happens >> with pow() and sqrt() functions. > > i don't see problems with pow or sqrt > > they seem to use sqrt(log(something)) which expands to a very > long expression, but otherwise it should work > > actually they shouldn't use tgmath.h at all > (it could be useful if they used a custom floating-point type that > is typedefed to float,double or long double in some header, but > they seem to use plain doubles everywhere) > > so you can fix the issue by replacing tgmath.h with math.h in that file > (and maybe report the issue upstream, tgmath.h is a header > that is hard to get right, can cause cryptic error messages, > and is very rarely used, so it should be avoided when possible) > Thanks for the quick fix, lrint issue is fixed. Right now build fails only on sqrt() and pow(): awgn.c: In function 'awgn_init_dbov': awgn.c:109:14: warning: cast to pointer from integer of different size awgn.c:109:14: warning: cast to pointer from integer of different size awgn.c:109:14: warning: cast to pointer from integer of different size awgn.c:109:5: error: void value not ignored as it ought to be and line 109: s->rms = pow(10.0, level/20.0)*32768.0; Next issue is awgn.c: In function 'awgn': awgn.c:165:15: warning: cast to pointer from integer of different size awgn.c:165:15: warning: cast to pointer from integer of different size awgn.c:165:9: error: void value not ignored as it ought to be awgn.c:165:9: warning: type defaults to 'int' in type name and line 165: fac = sqrt(-2.0*log(r)/r); So I suppose the fix is needed (don't know if it should be on musl side though). spandsp use tgmath.h only if available, so if I'll remove tgmath.h or undefine HAVE_TGMATH_H — spandsp builds fine. //wbr ojab
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.