Package: libc6 sys/sysmacros.h seems to use different method to determine if dev_t is unsigned long long or an array type than the actual dev_t declaration. Here's a test program that fails with tcc (included with Debian): #include <stdio.h> #include <sys/types.h> #include <sys/sysmacros.h> int main(int argc, char *argv[]) { dev_t x = 0; printf("%d %d\n", major(x), minor(x)); return 0; } Results as: test2.c:9: struct or union expected