Package: btrfs-tools Version: 3.14.1-1 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 -g -Os -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -o btrfs btrfs.o help.o cmds-subvolume.o cmds-filesystem.o cmds-device.o cmds-scrub.o cmds-inspect.o cmds-balance.o cmds-send.o cmds-receive.o cmds-quota.o cmds-qgroup.o cmds-replace.o cmds-check.o cmds-restore.o cmds-rescue.o chunk-recover.o super-recover.o cmds-property.o \ ctree.o disk-io.o radix-tree.o extent-tree.o print-tree.o root-tree.o dir-item.o file-item.o inode-item.o inode-map.o extent-cache.o extent_io.o volumes.o utils.o repair.o qgroup.o raid6.o free-space-cache.o list_sort.o props.o -Wl,-z,relro -luuid -lblkid -lm -lz -llzo2 -lcom_err -L. libbtrfs.a -lpthread error: conflicting function declarations "fstat" old definition in module cmds-filesystem file /usr/include/x86_64-linux-gnu/sys/stat.h line 220 signed int (signed int, struct stat *) new definition in module cmds-replace file /usr/include/x86_64-linux-gnu/sys/stat.h line 220 signed int (signed int, struct stat *) Makefile:179: recipe for target 'btrfs' failed make[2]: *** [btrfs] Error 64 While these declarations appear to be perfectly consistent, the extended diagnostics produced by our tool explain the difference: reason for conflict in types listed below (struct/struct): composite type component counts differ (18/15) struct stat { unsigned long int st_dev; unsigned long int st_ino; unsigned long int st_nlink; unsigned int st_mode; unsigned int st_uid; unsigned int st_gid; signed int __pad0; unsigned long int st_rdev; signed long int st_size; signed long int st_blksize; signed long int st_blocks; signed long int st_atime; unsigned long int st_atimensec; signed long int st_mtime; unsigned long int st_mtimensec; signed long int st_ctime; unsigned long int st_ctimensec; signed long int [3l] __unused; } struct stat { unsigned long int st_dev; unsigned long int st_ino; unsigned long int st_nlink; unsigned int st_mode; unsigned int st_uid; unsigned int st_gid; signed int __pad0; unsigned long int st_rdev; signed long int st_size; signed long int st_blksize; signed long int st_blocks; struct timespec st_atim; struct timespec st_mtim; struct timespec st_ctim; signed long int [3l] __unused; } This difference is caused by #define _XOPEN_SOURCE 500 being present in cmds-filesystem.c, while this is missing (at least) from cmds-replace.c. It would likely be best to specify this define on the compiler command line to ensure consistency across all files. Best, Michael
pgpXUvVFZBCM3.pgp
Description: PGP signature