Package: ace-of-penguins
Version: 1.3-13
Severity: wishlist
Usertags: goto-cc

During a rebuild of all Debian packages in a clean sid chroot (using cowbuilder
and 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: cc -g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 
-Wformat -Werror=format-security -Wall -D_FILE_OFFSET_BITS=64 
-D_FORTIFY_SOURCE=2 -fPIE -pie -Wl,-z -Wl,relro -Wl,-z -Wl,now -Wl,--as-needed 
-Wl,--as-needed -g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 
-Wformat -Werror=format-security -Wall -D_FILE_OFFSET_BITS=64 -fPIE -pie -Wl,-z 
-Wl,relro -Wl,-z -Wl,now -Wl,--as-needed -Wl,--as-needed -o .libs/canfield 
canfield.o canfield-img.o  ../lib/.libs/libcards.so -lpng -lz -lX11 -lm

error: conflicting types for variable "appimglib_imagelib"
old definition in module canfield file ./../lib/cards.h line 63
struct image_list []
new definition in module canfield-img file canfield-img.c line 152
struct image_list [2l]

reason for conflict in types listed below (struct/struct):
composite type component counts differ (1/8)
struct image_list {
  signed int filler;
}
struct image_list {
  char * name;
  signed int across;
  signed int down;
  struct image *[3l] subimage;
  struct image_list * next;
  struct image * (*)(struct image_list *list, signed int type, signed int 
width, signed int height) synth_func;
  signed int synth_flags;
  unsigned int $pad0;
}
Makefile:489: recipe for target 'canfield' failed
make[4]: *** [canfield] Error 64
make[4]: Leaving directory 
'/srv/jenkins-slave/workspace/sid-goto-cc-ace-of-penguins/ace-of-penguins-1.3/games'
Makefile:404: recipe for target 'all' failed
make[3]: *** [all] Error 2

While hiding the implementation of image_list surely makes sense, it should be
done in full rather than faking a different struct type. As such, simply
omitting lines 60 to 62, i.e., the definition of the struct using "filler", here

http://sources.debian.net/src/ace-of-penguins/1.3-13/lib/cards.h?hl=63#L59

will make sure the compiler is not tricked into making wrong assumptions about
alignment or element offsets.

Best,
Michael

Attachment: pgpFMZrFv8_Vr.pgp
Description: PGP signature

Reply via email to