Package: cxref
Version: 1.6d-6
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.

[...]
gcc -Wl,-z,relro cccp.o cexp.o prefix.o version.o -o cxref-cpp 

error: conflicting function declarations "check_assertion"
old definition in module cccp file cccp.c line 6692
signed int (unsigned char *name, signed int sym_length, signed int 
tokens_specified, struct arglist *tokens)
new definition in module cexp file cexp.c line 180
signed int (unsigned char *, signed int, signed int, struct arglist *)
Makefile:62: recipe for target 'cxref-cpp' failed
make[2]: *** [cxref-cpp] Error 64
make[2]: Leaving directory 
'/srv/jenkins-slave/workspace/sid-goto-cc-cxref/cxref-1.6d/cpp'
Makefile:23: recipe for target 'programs' failed

While the above appear consistent at first sight, the arglist structs are
actually different:

composite type component counts differ (6/4)
struct arglist {
  struct arglist * next;
  unsigned char * name;
  signed int length;
  signed int argno;
  char rest_args;
  unsigned long <<padding>> : 56;
}
struct arglist {
  struct arglist * next;
  unsigned char * name;
  signed int length;
  signed int argno;
}

What might be worse, however, is that both cccp.c and cexp.c provide definitions
(not only declarations!) of this function - with the above conflict in types.
Depending on which of the definitions the linker decides to pick, this might or
might not go wrong.

Best,
Michael

Attachment: pgpA68gi5ki9A.pgp
Description: PGP signature

Reply via email to