|
|
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.