
Hi Stefan,
Hi Detlev,
On Thursday 07 May 2009, Detlev Zundel wrote:
int misc_init_r(void) {
- uint pbcr;
- int size_val = 0;
- u32 reg;
- __attribute__((unused)) uint pbcr;
- __attribute__((unused)) int size_val = 0;
- __attribute__((unused)) u32 reg;
Am I correct to assume that this should shut up warnings for the ifdef case?
Yes.
If so, it still seems to be a somewhat rude way to do it. How long will it take the gcc maintainers to produce a "warning: unused variable is used" warning? ;)
I prefer to do it this way instead of encasing the variable declaration into another #ifdef ... #endif section. This is used in many cases in the Linux kernel btw. Here the macro "__maybe_unsed" is defined to "__attribute__((unused))".
In many cases? a rgrep on a recent kernel counts 84 incantations, which is not much for the Linux kernel, I believe.
So what should I do now? Should I revert to another #ifdef in the variable declaration? Or is the current version ok?
I'm not too sure myself. What really tickles me, and what speaks against using this attribute, is the fact that the "unused" attribute is itself not part of an #ifdef, whereas the intention clearly is that this attribute should only be applied when the ifdefs erases code.
Now currently this connection maybe clear for the writer of the patch, but it is in no way obvious in the code. So theoretically, when the #ifdef gets removed, nobody will think about the "unused" attributes, forget them and then we have effectively lost correct warnings.
What do other people think?
Cheers Detlev