Hi,

On Tue, Apr 23, 2002 at 11:25:44PM +0100, Major A wrote:
> SANE seems to compile OK on Tru64 5.0, I've just done a quick build
> and attached the output. There are plenty of warnings, though, it
> might be useful to backend authors as an indication of some weirdness
> in their code which gcc doesn't recognize. This build was done with
> DEC's CC, which is sometimes more verbose.

Thanks, very interesting. Please test again when sane-1.0.8 is released
so we can update the supported platforms page.

cc: Info: getopt.c, line 347: In this statement, the identifier "getpid" is 
implicitly declared as a function. (implicitfunc)
      sprintf (var, "_%d_GNU_nonoption_argv_flags_", getpid ());
-----------------------------------------------------^

(Lots of more warnings for getopt.c). Ugly but there are too many
ifdefs in this code so I won't even try to avoid these warnings (and
maybe break it completely on a different platform).

cc: Info: sanei_init_debug.c, line 103: In this statement, the identifier 
"isfdtype" is implicitly declared as a function. (implicitfunc)
      if ( 1 == isfdtype(fileno(stderr), S_IFSOCK) )
----------------^

Description: A expression contained a reference to a function that has not been 
declared. 
User Action: Declare the function before it is referenced. 
cc: Info: sanei_init_debug.c, line 109: In this statement, the identifier 
"vsyslog" is implicitly declared as a function. (implicitfunc)
              vsyslog (LOG_DEBUG, fmt, ap);
--------------^

[...]

If we wanted to fix those, we would need to declare all the functions
used in lib when they are compiled in. I'm not sure if we can do this
easily.

cc: Info: abaton.c, line 232: Code at or just after this location can never be 
executed. (unreachcode)
  return SANE_STATUS_INVAL;
--^
Description: The compiler has detected code that can never be executed. Often 
unreachable code represents a real coding error such as a label that is 
incorrectly spelled, or a statement that was inserted on the wrong line.  But 
sometimes it occurs in good code as a result of logical expressions that depend 
only on the values of constants (typically through macro expansion). 
User Action: Usually any code correction is obvious.  And often it is 
straightforward to rewrite compile-time logical expressions in terms of 
preprocessing constructs to avoid this diagnostic.  But in some programs it may 
be necessary to suppress this informational message explicitly in order to 
obtain a diagnostic-free compilation of production code, since rewriting the 
expression not to be evaluated at compile time would impact performance. 

That's cute. The compiler detects that all case statements have
returns or we are in an endless loop and don't break out of it. Maybe
a bit too intelligent :-)

cc: Info: coolscan.c, line 2336: Extraneous semicolon. (extrasemi)
};
-^
Description: An extra semicolon was found at the end of a declaration.  It will 
be ignored. 
User Action: Remove the extra semicolon. 

Already mentioned by Petter. Lots of more coolscan warnings deleted.
Is Andreas Rick still maintaining coolscan?

cc -c -O2 -g3 -w0 -verbose -DHAVE_CONFIG_H -I. -I. -I../include -I../include 
-D_GNU_SOURCE -DPATH_SANE_CONFIG_DIR=/nobackup/andras/sane/etc/sane.d 
-DPATH_SANE_DATA_DIR=/nobackup/andras/sane/share -DV_MAJOR=1 -DV_MINOR=0 
-DBACKEND_NAME=mustek -DLIBDIR=/nobackup/andras/sane/lib/sane mustek.c  -DPIC 
-o mustek.lo
cc: Warning: mustek.h, line 127: The redefinition of the macro "MIN" conflicts 
with a current definition because the replacement lists differ.  The 
redefinition is now in effect. (macroredef)
#define MIN(a,b)        ((a) < (b) ? (a) : (b))
--------------------------^
Description: A macro has been redefined with either different formal parameters 
and/or a different body than a previous definition of the macro. 
User Action: Either make all definitions of the same macro identical, or 
undefine the macro using the #undef preprocessing directive before it is 
redefined. 

Will be fixed in the next release.

cc -c -O2 -g3 -w0 -verbose -DHAVE_CONFIG_H -I. -I. -I../include -I../include 
-D_GNU_SOURCE -DPATH_SANE_CONFIG_DIR=/nobackup/andras/sane/etc/sane.d 
-DPATH_SANE_DATA_DIR=/nobackup/andras/sane/share -DV_MAJOR=1 -DV_MINOR=0 
-DBACKEND_NAME=mustek_pp -DLIBDIR=/nobackup/andras/sane/lib/sane mustek_pp.c  
-DPIC -o mustek_pp.lo
cc: Info: mustek_pp.c, line 1129: In this statement, an array is being accessed 
outside the bounds specified for the array type. (subscrbounds)
      dev->voltages[3] = 0x32;
--------------------^
Description: The compiler has detected an array access that is outside the 
bounds of the array.  The array access might cause unpredictable behavior. Note 
that in C, an array is declared using the number of elements, but the first 
element has subscript 0.  It is a common coding error to attempt to access the 
last element of an array of "n" elements using a subscript of "n" instead of "n 
- 1". However, there are two common practices that intentionally employ 
out-of-bounds subscripts to useful/correct effects that are not reported by 
this message, but have separate optional messages. First, taking the address of 
an array element that is exactly one  beyond the last element of an array is 
completely valid in standard C as long as the address is not used to access 
memory. The optional subscrbounds2 message can be enabled to report taking the 
address of the array element exactly one beyond the last element. Second, it is 
a somewhat common practice to declare the last member of a struct as an array 
with one element, and then allocate such structs at runtime with different 
sizes, recording the actual size in an earlier member of the struct.  The 
optional subscrbounds1 message can be enabled to report subscripts greater than 
zero applied to arrays declared with only one element. 
User Action: Specify an array subscript that is within the bounds of the array 
type. 

This one may be critical (->possible segfault or overwriting other
data).

cc -c -O2 -g3 -w0 -verbose -DHAVE_CONFIG_H -I. -I. -I../include -I../include 
-D_GNU_SOURCE -DPATH_SANE_CONFIG_DIR=/nobackup/andras/sane/etc/sane.d 
-DPATH_SANE_DATA_DIR=/nobackup/andras/sane/share -DV_MAJOR=1 -DV_MINOR=0 
-DBACKEND_NAME=mustek_usb -DLIBDIR=/nobackup/andras/sane/lib/sane mustek_usb.c  
-DPIC -o mustek_usb.lo
cc: Warning: mustek_usb_low.h, line 59: The redefinition of the macro "MIN" 
conflicts with a current definition because the replacement lists differ.  The 
redefinition is now in effect. (macroredef)
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
------------------------^

Will also be fixed.

Bye,
  Henning

Reply via email to