Just to expand on this lovely topic...
On 11/21/2011 02:43 PM, Linus Torvalds wrote:
On Mon, Nov 21, 2011 at 2:23 PM, David Daney<ddaney.cavm@xxxxxxxxx> wrote:
This whole comment strikes me as somewhat dishonest, as at the time David
Rientjes wrote it, he knew that there were dependencies on these symbols in
the linux-next tree.
Now we can add these:
+#define HPAGE_SHIFT ({ BUG(); 0; })
+#define HPAGE_SIZE ({ BUG(); 0; })
+#define HPAGE_MASK ({ BUG(); 0; })
Hell no.
We don't do run-time BUG() things. No way, no how.
These symbols are on dead code paths, so they are eliminated by the
compiler's Dead Code Elimination (DCE) optimizations, and the BUG() code
never gets emitted to the final executable.
I agree that it is not the best thing to do, but given the current state
of the art in build bug macros, it is the best we could have done.
What I think we need instead, and for which I will send a patch soon, is
something like this:
extern void you_are_screwed() __attribute__ ((error("BUILD_BUG_ON_USED
failed")));
#define BUILD_BUG_ON_USED() you_are_screwed()
#define HPAGE_SHIFT ({ BUILD_BUG_ON_USED(); 0; })
This allows us to use the symbols in straight line C code without a ton
of ugly #ifdefery, but give us build time error checking.
Thanks,
David Daney
If that #define cannot be used, then it damn well shouldn't be defined at all.
David's patch is clearly the right thing to do. Don't try to send me
the above kind of insane crap.
Linus