On Tue, Feb 23, 2010 at 11:49:06AM -0800, Randy Dunlap wrote: > Hi, > > You probably know that sparse produces a ton of errors & warnings when > run on the Linux kernel tree (a little over 1 MB in my latest 'make C=1' > on x86_64 arch.). > > I'm wondering if all of these are valid. > > Examples: > > > 1. Use of the BUILD_BUG_ON() macro causes this error from sparse: > > arch/x86/kernel/paravirt.c:101:9: error: invalid bitfield width, -1. > > include/linux/kernel.h: > > /* Force a compilation error if condition is true */ > #define BUILD_BUG_ON(condition) ((void)BUILD_BUG_ON_ZERO(condition)) > > /* Force a compilation error if condition is true, but also produce a > result (of value 0 and type size_t), so the expression can be used > e.g. in a structure initializer (or where-ever else comma expressions > aren't permitted). */ > #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) In theory that should only happen if the BUILD_BUG_ON_ZERO actually triggers, and thus sparse fails to build just as GCC would. If sparse has this problem and GCC doesn't, could you please provide a minimal test case? > 2. drivers/block/drbd/drbd_int.h uses __protected_by(var); > this seems to be unknown to sparse. > > #ifdef __CHECKER__ > # define __protected_by(x) __attribute__((require_context(x,1,999,"rdwr"))) > > sparse says many times: > > drivers/block/drbd/drbd_int.h:887:39: error: attribute 'require_context': unknown attribute That looks broken. A few patches went around for new Sparse context-tracking features, one of which got reverted before the 0.4.2 release, but I don't think any of them would have allowed *that*. - Josh Triplett -- 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