[GRASS5] Re: src/libes/gmath

Markus Neteler wrote:

sorry to disturb again: Currently I try to compile
gmath on CRAY. The CRAY compiler finds everything...

gcc will find a lot if you use '-Wall'. Here's a brief analysis of the
results:

   2759 GRASS_copyright defined but not used
   1818 unused variable `X'
   1187 implicit declaration of function `X'
    827 `X' might be used uninitialized in this function
    506 return-type defaults to `int'
    490 suggest parentheses around assignment used as truth value
    275 control reaches end of non-void function
    250 `X' defined but not used
    201 <standard input>:can't break line
    175 use of `l' length character with `X' type character
    102 X format, Y arg (arg N)
     95 passing arg 3 of `Tcl_CreateCommand' from incompatible pointer type
     93 embedded `\0' in format
     66 `return' with no value, in function returning non-void
     35 array subscript has type `char'
     35 <standard input>:numeric expression expected (got `X')
     32 suggest explicit braces to avoid ambiguous `else'
     20 type defaults to `int' in declaration of `X'
     14 format argument is not a pointer (arg #)
     11 too many arguments for format
     11 label `X' defined but not used
     10 suggest parentheses around && within ||
     10 `/*' within comment
      8 suggest parentheses around comparison in operand of &
      8 ignoring pragma: ident
      5 value computed is not used
      5 suggest parentheses around arithmetic in operand of |
      5 suggest parentheses around + or - inside shift
      5 missing braces around initializer for `X'
      5 `X' declared `static' but never defined
      5 <standard input>:`X' not defined (probable missing space after `X')
      3 zero-length format string
      3 unknown conversion type character `X' in format
      3 too few arguments for format
      3 suggest parentheses around comparison in operand of |
      3 statement with no effect
      2 variable `X' might be clobbered by `longjmp' or `vfork'
      2 enumeration value `X' not handled in switch
      2 `0' flag ignored with precision specifier and `d' format
      1 spurious trailing `%' in format
      1 no closing `]' for `%[' format
      1 `main' is usually a function
      1 <standard input>:can't find special character `X'
      1 <standard input>:can't find character with input code 12

  Total: 9094

Some of these are definitely harmless; others maybe not.

   2759 GRASS_copyright defined but not used

Harmless, although a bit of a nuisance; XEmacs' next-error command is
a lot less useful when so many warnings are false alarms.

   1187 implicit declaration of function `X'

Many of these can be fixed by adding the correct #include lines.
Others may need to have the header written.

This can cause problems, particularly for functions which have float
arguments, or on systems where long is larger than int.

    827 `X' might be used uninitialized in this function

This may indicate a problem, or it may just indicate that the compiler
can't determine that the variable will always be initialised.

    506 return-type defaults to `int'

Indicates a pre-ANSI prototype without an explicit return type.
Ideally these would be explicitly declared as returning either int or
void. Probably harmless.

    490 suggest parentheses around assignment used as truth value

I.e. "if (foo = bar) ...". I found a couple of cases in the gmath
library where this was a real error. It's quite possible that some of
those 490 are also errors.

    275 control reaches end of non-void function

Missing "return foo;" at the end of a function which returns a value.
Some of these are an artifact of the "return-type defaults to int"
issue, where the function should really return void but implicitly
returns int. Probably most are harmless, although some might be cases
where a function may return a garbage result.

    250 `X' defined but not used

Messy but harmless.

    175 use of `l' length character with `X' type character

[where `X' is `E', `e' or `f']

The 'l' modifier isn't valid for FP types in printf() etc (unlike
scanf() etc). Messy but harmless.

    102 X format, Y arg (arg #)

Most of these look problematic, although about half of those are down
to these two cases:

     25 int format, long int arg (arg #)
     28 long int format, int arg (arg #)

Next:

     95 passing arg 3 of `Tcl_CreateCommand' from incompatible pointer type

All of these are in src.contrib/GMSL/NVIZ2.2/src/init_commands.c

     93 embedded `\0' in format

91 of these are in src/raster/r.agnps50/agnps-source/debugflg.c; the
author of which appears to have been unaware that string literals are
automatically NUL terminated.

     66 `return' with no value, in function returning non-void

Some of these are an artifact of the "return-type defaults to int"
issue.

     35 array subscript has type `char'

In 3 files; this usually causes problems with characters outside of
the 7-bit range.

Others which indicate actual problems:

     14 format argument is not a pointer (arg N)
     11 too many arguments for format
      3 unknown conversion type character `X' in format
      3 too few arguments for format

It might also be worth looking at the "suggest parentheses" warnings.

--
Glynn Clements <glynn.clements@virgin.net>

Hi again,

concerning the gcc -Wall: I have spend some hours to fix
many warnings within the GRASS library and dbms driver.

However, I fixed "only"
  - missing includes added
     warning: implicit declaration of function 'exit' -> added
       #include <stdlib.h>
     warning: implicit declaration of function 'strcmp' -> added
      #include <string.h>
        etc.
  - removed unused variables

The warnings remaining are in (those more severe as Glynn describes below):
documents/compileOutput.log

I would be pretty glad if someone can continue. At least the
GRASS library should be clean. Please track what's done in above file,
thanks.

Markus

On Fri, Aug 31, 2001 at 04:09:43AM +0100, Glynn Clements wrote:

Markus Neteler wrote:

> sorry to disturb again: Currently I try to compile
> gmath on CRAY. The CRAY compiler finds everything...

gcc will find a lot if you use '-Wall'. Here's a brief analysis of the
results:

   2759 GRASS_copyright defined but not used
   1818 unused variable `X'
   1187 implicit declaration of function `X'
    827 `X' might be used uninitialized in this function
    506 return-type defaults to `int'
    490 suggest parentheses around assignment used as truth value
    275 control reaches end of non-void function
    250 `X' defined but not used
    201 <standard input>:can't break line
    175 use of `l' length character with `X' type character
    102 X format, Y arg (arg N)
     95 passing arg 3 of `Tcl_CreateCommand' from incompatible pointer type
     93 embedded `\0' in format
     66 `return' with no value, in function returning non-void
     35 array subscript has type `char'
     35 <standard input>:numeric expression expected (got `X')
     32 suggest explicit braces to avoid ambiguous `else'
     20 type defaults to `int' in declaration of `X'
     14 format argument is not a pointer (arg #)
     11 too many arguments for format
     11 label `X' defined but not used
     10 suggest parentheses around && within ||
     10 `/*' within comment
      8 suggest parentheses around comparison in operand of &
      8 ignoring pragma: ident
      5 value computed is not used
      5 suggest parentheses around arithmetic in operand of |
      5 suggest parentheses around + or - inside shift
      5 missing braces around initializer for `X'
      5 `X' declared `static' but never defined
      5 <standard input>:`X' not defined (probable missing space after `X')
      3 zero-length format string
      3 unknown conversion type character `X' in format
      3 too few arguments for format
      3 suggest parentheses around comparison in operand of |
      3 statement with no effect
      2 variable `X' might be clobbered by `longjmp' or `vfork'
      2 enumeration value `X' not handled in switch
      2 `0' flag ignored with precision specifier and `d' format
      1 spurious trailing `%' in format
      1 no closing `]' for `%[' format
      1 `main' is usually a function
      1 <standard input>:can't find special character `X'
      1 <standard input>:can't find character with input code 12

  Total: 9094

Some of these are definitely harmless; others maybe not.

   2759 GRASS_copyright defined but not used

Harmless, although a bit of a nuisance; XEmacs' next-error command is
a lot less useful when so many warnings are false alarms.

   1187 implicit declaration of function `X'

Many of these can be fixed by adding the correct #include lines.
Others may need to have the header written.

This can cause problems, particularly for functions which have float
arguments, or on systems where long is larger than int.

    827 `X' might be used uninitialized in this function

This may indicate a problem, or it may just indicate that the compiler
can't determine that the variable will always be initialised.

    506 return-type defaults to `int'

Indicates a pre-ANSI prototype without an explicit return type.
Ideally these would be explicitly declared as returning either int or
void. Probably harmless.

    490 suggest parentheses around assignment used as truth value

I.e. "if (foo = bar) ...". I found a couple of cases in the gmath
library where this was a real error. It's quite possible that some of
those 490 are also errors.

    275 control reaches end of non-void function

Missing "return foo;" at the end of a function which returns a value.
Some of these are an artifact of the "return-type defaults to int"
issue, where the function should really return void but implicitly
returns int. Probably most are harmless, although some might be cases
where a function may return a garbage result.

    250 `X' defined but not used

Messy but harmless.

    175 use of `l' length character with `X' type character

[where `X' is `E', `e' or `f']

The 'l' modifier isn't valid for FP types in printf() etc (unlike
scanf() etc). Messy but harmless.

    102 X format, Y arg (arg #)

Most of these look problematic, although about half of those are down
to these two cases:

     25 int format, long int arg (arg #)
     28 long int format, int arg (arg #)

Next:

     95 passing arg 3 of `Tcl_CreateCommand' from incompatible pointer type

All of these are in src.contrib/GMSL/NVIZ2.2/src/init_commands.c

     93 embedded `\0' in format

91 of these are in src/raster/r.agnps50/agnps-source/debugflg.c; the
author of which appears to have been unaware that string literals are
automatically NUL terminated.

     66 `return' with no value, in function returning non-void

Some of these are an artifact of the "return-type defaults to int"
issue.

     35 array subscript has type `char'

In 3 files; this usually causes problems with characters outside of
the 7-bit range.

Others which indicate actual problems:

     14 format argument is not a pointer (arg N)
     11 too many arguments for format
      3 unknown conversion type character `X' in format
      3 too few arguments for format

It might also be worth looking at the "suggest parentheses" warnings.

--
Glynn Clements <glynn.clements@virgin.net>
_______________________________________________
grass5 mailing list
grass5@grass.itc.it
http://grass.itc.it/mailman/listinfo/grass5