Package: libconfig Version: 1.4.9-2 Usertags: goto-cc During a rebuild of all packages in a clean sid chroot (and cowbuilder+pbuilder) the build failed with the following error. Please note that we use our research compiler tool-chain (using tools from the cbmc package), which permits extended reporting on type inconsistencies at link time.
[...] libtool: link: gcc -shared -fPIC -DPIC .libs/libconfig_la-libconfig.o .libs/libconfig_la-scanner.o .libs/libconfig_la-grammar.o .libs/libconfig_la-scanctx.o .libs/libconfig_la-strbuf.o -O2 -Wl,-z -Wl,relro -Wl,-soname -Wl,libconfig.so.9 -o .libs/libconfig.so.9.1.3 error: conflicting function declarations "libconfig_yy_delete_buffer" old definition in module libconfig file scanner.h line 202 void (struct yy_buffer_state *, void *) new definition in module scanner file scanner.c line 1743 void (struct yy_buffer_state *b, void *yyscanner) reason for conflict in types listed below (struct/struct): composite type component counts differ (13/12) struct yy_buffer_state { struct _IO_FILE * yy_input_file; char * yy_ch_buf; char * yy_buf_pos; unsigned int yy_buf_size; signed int yy_n_chars; signed int yy_is_our_buffer; signed int yy_is_interactive; signed int yy_at_bol; signed int yy_bs_lineno; signed int yy_bs_column; signed int yy_fill_buffer; signed int yy_buffer_status; unsigned int <padding>; } struct yy_buffer_state { struct _IO_FILE * yy_input_file; char * yy_ch_buf; char * yy_buf_pos; unsigned long int yy_buf_size; signed int yy_n_chars; signed int yy_is_our_buffer; signed int yy_is_interactive; signed int yy_at_bol; signed int yy_bs_lineno; signed int yy_bs_column; signed int yy_fill_buffer; signed int yy_buffer_status; } Makefile:518: recipe for target 'libconfig.la' failed make[5]: *** [libconfig.la] Error 64 make[5]: Leaving directory '/srv/jenkins-slave/workspace/sid-goto-cc-libconfig/libconfig-1.4.9/lib' Makefile:437: recipe for target 'all' failed make[4]: *** [all] Error 2 The difference in the two struct types is an additional padding, which is really caused by the different types of the yy_buf_size member. Consequently the offsets of all subsequent members will differ, resulting in undefined behaviour. Reviewing the struct declaration in scanner.h yields further insight: http://sources.debian.net/src/libconfig/1.4.9-2/lib/scanner.h?hl=143,144,145,146#L143 It seems that libconfig.c will not have YY_TYPEDEF_YY_SIZE_T set, and thus yy_size_t is set to unsigned. Best, Michael
pgpC50jwX6cli.pgp
Description: PGP signature