When building OpenOffice trunk revsion r1758161 as a FreeBSD port on
FreeBSD 12.0-CURRENT with clang 3.8.0, I get the following warnings.
I'm mostly interested in the OpenOffice code and not the bundled
external code, so I specifically built the FreeBSD port it uses
--with-system-foo extensively which minimizes the compilation of third
party code. The total number of warnings is 5105.
1175 -Wtautological-undefined-compare
949 -Wunused-private-field
660 -Wshift-negative-value
391 -Wunused-parameter
362 -Wunused-const-variable
312 -Woverloaded-virtual
177 -Wunused-variable
116 -Winfinite-recursion
109 -Wlogical-op-parentheses
93 -Wsign-compare
76 -Wdelete-non-virtual-dtor
72 -Wint-to-void-pointer-cast
63 -Wshadow
55 -Wunused-function
41 -Wformat
36 -Wreturn-type-c-linkage
30 -Wchar-subscripts
27 -Wdeprecated-declarations
26 -Wundefined-bool-conversion
26 -Wsizeof-pointer-memaccess
26 -Wformat-security
24 -Wunused-local-typedef
22 -Wmacro-redefined
21 -Wswitch
20 -Wbitwise-op-parentheses
18 -Winvalid-source-encoding
13 -Wuninitialized
11 -Wtautological-compare
11 -Wlogical-not-parentheses
11 -Wdangling-else
9 -Wmismatched-new-delete
8 -Wimplicit-function-declaration
8 -Wheader-guard
8 -Wcomment
7 -Wtautological-constant-out-of-range-compare
7 -Wself-assign
6 -Wunused-value
6 -Wunneeded-internal-declaration
6 -Wtautological-pointer-compare
6 -Wpointer-bool-conversion
6 -Wparentheses-equality
6 -Wdynamic-class-memaccess
6 -Wconstant-conversion
5 -Wpointer-sign
4 -Wnull-conversion
3 -Wunsequenced
3 -Wreorder
3 -Wknr-promoted-parameter
3 -Wint-to-pointer-cast
2 -Wstrncat-size
2 -Wstring-compare
2 -Wsometimes-uninitialized
2 -Wconstant-logical-operand
2 -Warray-bounds
1 -Wunused-comparison
1 -Wunknown-pragmas
1 -Wstring-plus-int
1 -Wpotentially-evaluated-expression
1 -Wnon-literal-null-conversion
1 -Wmismatched-tags
1 -Wincompatible-pointer-types-discards-qualifiers
1 -Wimplicit-int
1 -Wignored-qualifiers
1 -Wformat-extra-args
1 -Wcompare-distinct-pointer-types
1 -Wc++11-compat-deprecated-writable-strings
A couple -Wtautological-undefined-compare warnings:
warning: reference cannot be bound to dereferenced null pointer in well-defined
C++ code; comparison may be assumed to always evaluate to false [-Wtautologica
l-undefined-compare]
if (&other == NULL) {
^~~~~ ~~~~
warning: 'this' pointer cannot be null in well-defined C++ code; comparison may
be assumed to always evaluate to false [-Wtautological-undefin
ed-compare]
if(this == 0 || this == &src) {
^~~~ ~
I'd like to just nuke these comparisions.
To fix the -Wunused-private-field private field warnings, I'd prefer to
delete them, but that would have the side effect of breaking the ABI if
an extensions use the class constructor. The alternative would be to
mark them unused. I don't think there are actually many cases of this.
The same warning gets generated anytime the header is included.
In the case of -Wshift-negative-value, result of shifting negative
values is undefined. This is generally fixable by using unsigned values
instead.
I'm not sure what to about -Wunused-parameter. It's probably a case by
case situation where it may sometimes make sense to have a variant
function that doesn't have that parameter and modify the callers. The
alternative is to mark the argument as unused. I haven't really
examined any of these in detail.
For -Wunused-const-variable and -Wunused-variable, I propose just
deleting them unless they are referenced by conditionally compiled code,
in which case I would make the variable declaration conditional as well.
I fixed one other case of -Winfinite-recursion. I'm pretty sure this is
just one error, but it is contained in a header.
I think -Wshadow warnings should be fixed by renaming the variable.
I don't recall ever seeing -Wunused-function scroll by, but if functions
are totally unused, they should be deleted.
The parentheses warnings should just get fixed.
This is an example -Wdelete-non-virtual-dtor warning:
warning: delete called on non-final 'RscError' that has virtual functions but
non-virtual destructor [-Wdelete-non-virtual-dtor]
delete pErrHdl;
My C++ book says that non-virtual destructors are bad generally bad. We
also compile with -Wno-non-virtual-dtor to suppress even more warnings.
Does anyone know why?
The -Wformat-security warnings should definitely be fixed.
The -Wformat warnings should also be fixed, though care must be taken
for both 32-bit and 64-bit builds.
I haven't really looked at the other warnings in any detail.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]