Messages in this thread | | | From | Arnd Bergmann <> | Subject | Re: [PATCH 16/16] fix handling of integer constant expressions | Date | Sun, 24 Jun 2007 20:07:10 +0200 |
| |
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-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |