Re: Switch -Wunused-variable on?

Jeffrey Walton
2012-04-22T22:25:51Z

On Sun, Apr 22, 2012 at 4:24 PM, Sergio Durigan Junior
<sergiodj@redhat.com> wrote:
> On Sunday, April 22 2012, Jan Kratochvil wrote:
>
>> On Sun, 22 Apr 2012 09:14:44 +0200, Sergio Durigan Junior wrote:
>>> However, before continuing to prepare this patch, I would like what you
>>> think about enabling -Wunused-variable by default in the building.
>>
>> There are more useful -Wunused* options, GDB uses now:
>>       -Wno-unused -Wunused-value -Wunused-function
>
> Sorry, do you mean that there are more useful -Wunused* flags than
> -Wunused-variable?
>
>> IIRC the counterargument for -Wunused-variable was that GDB contains various
>> #if-compiled code where is a nightmare to get the code right with matching
>> #if-clauses also for the variables being used by various #if-compiled code
>> chunks.  I could not find that mail now in the time I gave to it.
>
> Yes, this is a counter-argument, and I was also thinking about it.  I
> don't know how people prefer to deal with this issue, but something
> like:
>
> #define USED_VAR(var) ((void) var)
I use this technique when using -Wall. It even works on Visual Studio,
so the technique is portable.

>> I believe more -Wunused* would be worth it, maybe the mail was before Joel
>> started to disable -Werror for releases so that claim about problematic
>> #if-clauses is no longer valid.
>
> Yes, I believe the more useful warnings we have, the better.
In general, you will encounter a lot of resistance to increasing
warning. For example, try to add -Wall -Wextra -Wconversion
-Wstrict-overflow to CFLAGS or CXXFLAGS on some project.

Some even refute the results even when they are valid findings. For
example, when static analysis warned the kernel's sys_prctl was
comparing an unsigned value against less than zero, Jesper Juhl
offered a patch to clean up the code. Linus Torvalds howled “No, you
don't do this... GCC is crap.” For the full discussion, see "[PATCH]
Don't compare unsigned variable for <0 in sys_prctl()"
(http://linux.derkeiler.com/Mailing-Lists/Kernel/2006-11/msg08325.html)
from the Linux Kernel mailing list.

I live and die by GCC's static analysis capabilities. I've got stuff
that has been in the field for years and never taken a bug report or
crashed. But I also validate all parameter in each function (C/C++
makes no guarantees on a call graph), I also check all return values,
assert *everything* in debug builds (the best code is code that debugs
itself), and write negative test cases. I could not care less about
positive test cases since you could hire a kid from a third world
country to copy/paste code that passes positive tests.

If I got pwned as often as the l33t k3rn3l hAck3rz, I would consider
finding a new profession. Worst, the tools are already available to
find an fix most of the low hanging fruit. Arrogance and ignorance is
a big problem in the community...

Jeff