On 10/01/2012 07:48 PM, Michel Lespinasse wrote: > On Fri, Sep 28, 2012 at 4:20 PM, Daniel Santos <daniel.santos@xxxxxxxxx> wrote: >> Negative sized arrays wont create a compile-time error in some cases >> starting with gcc 4.4 (e.g., inlined functions), but gcc 4.3 introduced >> the error function attribute that will. This patch modifies >> BUILD_BUG_ON to behave like BUILD_BUG already does, using the error >> function attribute so that you don't have to build the entire kernel to >> discover that you have a problem, and then enjoy trying to track it down >> from a link-time error. > Few other alternatives I've seen used in other projects (from memory, > so I may have gotten the details wrong): > > 1) if (condition) { __asm__(".error \"Some error message\""); } > 2) switch (0) { > case 0: break; > case !condition: break; > } > (fails to compile if !condition evaluates to 0) > > If you can get the first suggestion to work it'd be nice, as you could > get some descriptive error message (you can add the line number there > too). Thanks for this info. I'm still pretty noob-ish in modern assembly, but is the .error directive available on all supported assemblers? It appears to have been added to GNU binutils in version 2.16 from what I can tell (http://sourceware.org/binutils/docs-2.16/as/Error.html). If it is supported, I would definitely prefer that one as a fallback option. I did a search on sources for the regex \.error\s+\\?" and didn't turn up anything outside of arch/, so I'm guessing this may not be completely portable. Note also that these BUILD_BUG* macros do emit an error message on gcc 4.3+ using __attribute__((error("msg"))). Daniel -- 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