[YBA] kernel compile errors with GCC >= 4.6

[YBA] kernel compile errors with GCC >= 4.6

Nadav Har'El nyh at math.technion.ac.il
Thu Apr 5 10:57:19 IDT 2012


On Wed, Apr 04, 2012, Oleg Goldshmidt wrote about "Re: [YBA] kernel compile errors with GCC >= 4.6":
> On Wed, Apr 4, 2012 at 10:03 AM, Jonathan Ben Avraham <yba at tkos.co.il>wrote:
> 
> > Dear linux-il colleagues,
> > GCC 4.6 introduced many new warnings that cause -Werror to stop the
> > compilation for some platforms, such as powerpc, in various files.
> 
> Oh, I didn't even know they finally introduced -Werror... Good.

Why is this good?

In the (very) old days, there was a clear separation: The compiler
gave you *errors*, and a separate program, call "lint",
(http://en.wikipedia.org/wiki/Lint_%28software%29) was used to find
various risky code, possible bugs, unused variables, and so on, and
warn on them.

I *don't* like the fact that modern compilers decide to complain on
issues of questionable style, such having a variable which is never
used, using "=" (deliberately, not ==) in an "if"'s expression, and so
on. I like even less the trend to use something like "-Werror" to *abort*,
not just warn, on these cases.

After our last Hspell release, I started receiving complaints from
various people who used slightly different compilers than I did, so got
different *warnings* that I didn't get. This was very annoying, because
although I could (and did) fix those warnings, most of them did not have
any merit, and the only reason why I made many of these changes was to
"appease" the compilers. In one example, the compiler wrongly deduced that a
variable could be used before being set, which was false (I can explain why,
but the details aren't important here). In another example, a header file
defined a few static arrays, and not all of them were needed in each
including file - and the compiler complained about the defined-but-not-used
static arrays.

I think all of this is bad. I agree that it's useful to have a tool
(lint, gcc -Wall, or whatever), for the *developer* to find possible
problems. But the developer shouldn't *have* to change the code to
appease this tool, if he doesn't want to. The compiler that a *user*
of this code uses should definitely not attempt to look for such
"possible" problems, and most definitely should not abort the
compilation if it finds some. The contract between the programmer and
the user is that the programmer writes the code as carefully as he can -
and the user tries the best he can to compile it, NOT find reasons for
the compilation to fail. See also http://en.wikipedia.org/wiki/Postel%27s_law

If -Werror is used in a big-enough project, there is a very high
probability that compilation will always fail when a new version of the
compiler is first tried. I fail to see why this is a good thing.

-- 
Nadav Har'El                        |                   Thursday, Apr 5 2012, 
nyh at math.technion.ac.il             |-----------------------------------------
Phone +972-523-790466, ICQ 13349191 |Someone offered you a cute little quote
http://nadav.harel.org.il           |for your signature? JUST SAY NO!



More information about the Linux-il mailing list