Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 6 Jan 2021 11:53:13 -0800
From:      Ryan Libby <rlibby@freebsd.org>
To:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   clang vs gcc warning flags
Message-ID:  <CAHgpiFwK77o3J6Bm_3GAQRGAJz70=n8Z8bqqLirahL_gqXCM3w@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
One of the more annoying things about keeping the gcc build going is the
set of warnings that gcc acts on but clang only recognizes for
compatibility.  As a common example, -Wredundant-decls has no effect
in clang, but will break the gcc build.  There are a couple dozen such
flags [1][2], and a few of them are in our default set of warnings, such
as in sys/conf/kern.mk, these ones in CWARNFLAGS:

 - Wredundant-decls
 - Wnested-externs
 - Wmissing-include-dirs

additionally some warnings are explicitly disabled for clang, but not
for gcc in CWARNEXTRA:

 - Wempty-body
 - Wunused-function

Similarly, in share/mk/bsd.sys.mk:

 - Winline (although, Wno-error'd)
 - Wnested-externs
 - Wredundant-decls
 - Wold-style-definition

So I suggest we harmonize these somewhat.

 - Wnested-externs I just do not understand.  We have specified this
   warning flag for some 25 years but to me it seems completely without
   value.  I suggest we just delete it.

 - Wredundant-decls, I'm not sure about.  I have never seen this detect
   anything that will cause misbehavior, but most of the time that it
   fires it does indicate some kind of genuine--but harmless--mistake.

 - Wmissing-include-dirs doesn't seem to occur often and usually
   indicates a genuine (but again harmless) mistake in a makefile.  I
   think we should keep it.

 - Wempty-body, Wunused-function.  I'm not sure.  These are proscriptive
   about things that are not necessarily problems.  We are apparently
   already clean for them in the kernel gcc build, so perhaps we should
   enable them for the kernel clang build.  In any case, I think we
   should bring these into agreement between clang and gcc, one way or
   the other.

Another sticking point may be contrib software.  I think we generally
don't want to fail builds of contrib software for things that are
ultimately harmless.  For bsd.sys.mk this could be accomplished by
enabling such warnings only at WARNS >= 6.  For the kernel, we could
come up with some other mechanism.

I'll put up a review soon for deleting -Wnested-externs unless there are
objections.  If there is agreement about the others, I'll include those
too.

Ryan

[1] https://clang.llvm.org/docs/DiagnosticsReference.html
[2] https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAHgpiFwK77o3J6Bm_3GAQRGAJz70=n8Z8bqqLirahL_gqXCM3w>