[poc] buildkernel + clang + -Werror

Alexander Best arundel at freebsd.org
Sat Nov 5 20:38:46 UTC 2011


On Sat Nov  5 11, Dimitry Andric wrote:
> On 2011-11-05 11:21, Alexander Best wrote:
> > i'm sending this mail to the mailinglist simply to prevent my work being list.
> > i've experimented with the -Werror and -Wno-error= options and got to the point
> > where i was able to compile GENERIC on amd64 with clang:
> ...
> 
> Why don't you just use NO_WERROR?  If you are aiming to simply suppress
> warnings, that is a way simpler solution.

because setting NO_WERROR to certain -Wno-error= options will complain about
broken code, which gets committed. that way clang might be used for tinderbox,
whereas with NO_WERROR simply defined to nothing, broken or unclean commits
will not make tinderbox fail.

if we could set NO_WERROR to bogus -Wno-error= options, clang will then only
error out with *real* bugs.

> 
> The code that causes the warnings should simply be fixed, unless it is
> the contrib area, and would make merging harder, or if the warnings are
> false positives.

but lets take the follwing case:

uint x;

if (x < 0 | x > 256)

this is correct code, yet clang will complain. so i think it's safe to set
-Wno-error=tautological-compare

on the other hand

/usr/git-freebsd-head/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c:577:24: warning: implicit conversion from enumeration type 'HAL_STATUS' to different enumeration type 'HAL_BOOL' [-Wconversion]
                return HAL_EINVAL; 
                ~~~~~~ ^~~~~~~~~~
1 warning generated.

might be a problem, so -Wno-error=conversion should not be set and the case
should be fixed inside the code.

> 
> Only in the latter case, and only if clang cannot be fixed right now
> (such as with the ?: operator problem), there should be a workaround.
> And even then as local as possible, so share/mk/*.mk is not the right
> place to add a fix.
> 
> 
> > 1) this will only work with clang tot, since the clang version that ships with
> >    HEAD atm doesn't understand 'shift-count-negative'; it is being implied by
> >    -Werror and cannot be turned off seperately.
> > 2) there is a bug in the clang version that ships with HEAD, where -Wno-error=X
> >    implies -WX. this is not correct (see gcc(1) man page) and was fixed in
> >    clang tot.
> 
> I'll have a look if it's possible to import these.  Since head now has
> clang from the 3.0 release branch, and the idea is to ship FreeBSD 9.0
> with the 3.0 release, or something as close as possible to it, I don't
> plan on importing clang trunk anytime soon.

unfortunately latest clang tot is broken again. :(

i got

/usr/git-freebsd-head/sys/dev/sound/pcm/sound.c:85:2: error: invalid conversion specifier 'b' [-Werror,-Wformat-invalid-specifier]
        SNDSTAT_PREPARE_PCM_END();
        ^~~~~~~~~~~~~~~~~~~~~~~~

although -Wno-error=format-invalid-specifier was specified.

cheers.
alex


More information about the freebsd-toolchain mailing list