Hi, I finally got around to trying to update FLAC for the MAME/MESS project again. There were several issues I was able to fix and will submit patches later, but I hit one roadblock with GCC and clang: src/lib/libflac/libFLAC/stream_encoder.c:1696:43: error: cast from function call of type 'double' to non-matching type 'FLAC__int32' (aka 'int') [-Werror,-Wbad-function-cast] ...FLAC__int32 tukey_parts = (FLAC__int32)strtod(specification+14, 0); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ src/lib/libflac/libFLAC/stream_encoder.c:1717:43: error: cast from function call of type 'double' to non-matching type 'FLAC__int32' (aka 'int') [-Werror,-Wbad-function-cast] ...FLAC__int32 tukey_parts = (FLAC__int32)strtod(specification+15, 0); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 errors generated. Apparently you are supposed to round() or floor() instead of just casting a double to an integer. I have no idea what is the intention here, so an official fix is appreciated. Thanks Oliver
Oliver St?neberg wrote:> I finally got around to trying to update FLAC for the MAME/MESS > project again. There were several issues I was able to fix and will > submit patches later, but I hit one roadblock with GCC and clang: > > src/lib/libflac/libFLAC/stream_encoder.c:1696:43: error: cast from function call > of type 'double' to non-matching type 'FLAC__int32' (aka 'int') > [-Werror,-Wbad-function-cast] > ...FLAC__int32 tukey_parts = (FLAC__int32)strtod(specification+14, 0); > ^~~~~~~~~~~~~~~~~~~~~~~~~~~ > src/lib/libflac/libFLAC/stream_encoder.c:1717:43: error: cast from function call > of type 'double' to non-matching type 'FLAC__int32' (aka 'int') > [-Werror,-Wbad-function-cast] > ...FLAC__int32 tukey_parts = (FLAC__int32)strtod(specification+15, 0); > ^~~~~~~~~~~~~~~~~~~~~~~~~~~ > 2 errors generated.What build system are you using and what versions of GCC and Clang? What OS?> Apparently you are supposed to round() or floor() instead of just > casting a double to an integer.Sorry, thats not correct, strtod() returns double and the type signatures of round and floor are as follows: double round(double x); double floor(double x); so you have to cast anyway. Erik -- ---------------------------------------------------------------------- Erik de Castro Lopo http://www.mega-nerd.com/
> Oliver St?neberg wrote: > > > I finally got around to trying to update FLAC for the MAME/MESS > > project again. There were several issues I was able to fix and will > > submit patches later, but I hit one roadblock with GCC and clang: > > > > src/lib/libflac/libFLAC/stream_encoder.c:1696:43: error: cast from function call > > of type 'double' to non-matching type 'FLAC__int32' (aka 'int') > > [-Werror,-Wbad-function-cast] > > ...FLAC__int32 tukey_parts = (FLAC__int32)strtod(specification+14, 0); > > ^~~~~~~~~~~~~~~~~~~~~~~~~~~ > > src/lib/libflac/libFLAC/stream_encoder.c:1717:43: error: cast from function call > > of type 'double' to non-matching type 'FLAC__int32' (aka 'int') > > [-Werror,-Wbad-function-cast] > > ...FLAC__int32 tukey_parts = (FLAC__int32)strtod(specification+15, 0); > > ^~~~~~~~~~~~~~~~~~~~~~~~~~~ > > 2 errors generated. > > What build system are you using and what versions of GCC and Clang? > What OS?clang 3.5 on ubuntu 14.04 and GCC (MinGW-w64) 4.9.1 on Windows 7.> > Apparently you are supposed to round() or floor() instead of just > > casting a double to an integer. > > Sorry, thats not correct, strtod() returns double and the type signatures > of round and floor are as follows: > > double round(double x); > double floor(double x); > > so you have to cast anyway.Alright...stupid me. I just don't use mathematical functions very often...