Package: libc6-dev Version: 2.24-10 Hello,
I'm investigating cockpit's build failure on x32 [1]. It builds with -Werror=format=2 to detect format string type errors, and compiling | struct stat *buf) | [...] | return g_strdup_printf ("1:%lu-%ld.%ld", | (unsigned long)buf->st_ino, | buf->st_mtim.tv_sec, | buf->st_mtim.tv_nsec); fails like this: > src/bridge/cockpitfsread.c: In function 'file_tag_from_stat': > src/bridge/cockpitfsread.c:120:38: error: format '%ld' expects argument of > type 'long int', but argument 3 has type '__time_t {aka long long int}' > [-Werror=format=] > return g_strdup_printf ("1:%lu-%ld.%ld", This is a bug in the above cockpit source which I'll fix. > src/bridge/cockpitfsread.c:120:42: error: format '%ld' expects argument of > type 'long int', but argument 4 has type '__syscall_slong_t {aka long long > int}' [-Werror=format=] > return g_strdup_printf ("1:%lu-%ld.%ld", > ^ > cc1: some warnings being treated as errors However, this is not. The documentation [2] defines struct timeval's "tv_nsec" field as "long int", so %ld is correct. But glibc seems to really define it as "__syscall_slong_t tv_nsec", and on x32 __syscall_slong_t appears to be "long long int". Thanks, Martin [1] https://buildd.debian.org/status/fetch.php?pkg=cockpit&arch=x32&ver=138-1&stamp=1491831935&raw=0 [2] https://www.gnu.org/software/libc/manual/html_node/Elapsed-Time.html