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
    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
  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

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: dev-unsubscr...@openoffice.apache.org
For additional commands, e-mail: dev-h...@openoffice.apache.org

Reply via email to