libxo
libxo copied to clipboard
Fails to build with GCC on FreeBSD
Affects at least FreeBSD 11.3-RELEASE, 12.1-RELEASE, 13.0-RELEASE.
$ pkg install automake libtool gmake gcc9
$ sh bin/setup.sh
$ cd build
$ export MAKE=gmake CC=gcc9
$ ../configure --enable-warnings
$ gmake
[...]
../../libxo/xo_encoder.c: In function 'xo_encoder_discover':
../../libxo/xo_encoder.c:237:9: error: cast between incompatible function types from 'dlfunc_t' {aka 'void (*)(struct __dlfunc_arg)'} to 'int (*)(xo_encoder_init_args_t *)' {aka 'int (*)(struct xo_encoder_init_args_s *)'} [-Werror=cast-function-type]
237 | func = (xo_encoder_init_func_t) dlfunc(dlp, XO_ENCODER_INIT_NAME);
| ^
Very strange, considering that dlfunc is meant to be cast:
The dlfunc() function implements all of the behavior of dlsym(), but has
a return type which can be cast to a function pointer without triggering
compiler diagnostics. (The dlsym() function returns a data pointer; in
the C standard, conversions between data and function pointer types are
undefined. Some compilers and lint(1) utilities warn about such casts.)
The precise return type of dlfunc() is unspecified; applications must
cast it to an appropriate function pointer type.
I guess the fix would involve "#pragma GCC diagnostic push/ignore/pop".
Thanks, Phil
Sorry to be so insanely slow; Fixed in "develop".
Thanks, Phil