• R
    BUILD_BUG_ON: make it handle more cases · 7ef88ad5
    Rusty Russell 提交于
    BUILD_BUG_ON used to use the optimizer to do code elimination or fail
    at link time; it was changed to first the size of a negative array (a
    nicer compile time error), then (in
    8c87df45) to a bitfield.
    
    This forced us to change some non-constant cases to MAYBE_BUILD_BUG_ON();
    as Jan points out in that commit, it didn't work as intended anyway.
    
    bitfields: needs a literal constant at parse time, and can't be put under
    	"if (__builtin_constant_p(x))" for example.
    negative array: can handle anything, but if the compiler can't tell it's
    	a constant, silently has no effect.
    link time: breaks link if the compiler can't determine the value, but the
    	linker output is not usually as informative as a compiler error.
    
    If we use the negative-array-size method *and* the link time trick,
    we get the ability to use BUILD_BUG_ON() under __builtin_constant_p()
    branches, and maximal ability for the compiler to detect errors at
    build time.
    
    We also document it thoroughly.
    Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
    Cc: Jan Beulich <JBeulich@novell.com>
    Acked-by: NHollis Blanchard <hollisb@us.ibm.com>
    7ef88ad5
kernel.h 19.5 KB