On Sunday 24 June 2007, Al Viro wrote: > but the latter... Probably ought to be > #define _IOC_TYPECHECK(t) \ > (sizeof(t) + BUILD_BUG_ON_ZERO(sizeof(t) == sizeof(t[1]) && \ > sizeof(t) < (1 << _IOC_SIZEBITS))) > > Objections? The only reason that doesn't break gcc to hell and back is > that gcc has unfixed bugs in that area. It certainly is not a valid C > or even a remotely sane one. Yes, looks good. I originally came up with _IOC_TYPECHECK before we had the generic BUILD_BUG_ON(). One minor issue though: While BUILD_BUG_ON and a few other macros in linux/kernel.h are currently exported to user space, I would think that they should really be hidden in #ifdef __KERNEL__, which means that we also need something like #ifdef __KERNEL__ #define _IOC_TYPECHECK(t) \ (sizeof(t) + BUILD_BUG_ON_ZERO(sizeof(t) == sizeof(t[1]) && \ sizeof(t) < (1 << _IOC_SIZEBITS))) #else #define _IOC_TYPECHECK(t) sizeof(t) #endif Arnd <>< - To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html