Olivier L'Heureux
Wed, 10 Jul 2002 06:34:48 -0700
Hello!
While Splint is certainly a great tool, I was wondering
if it could catch more errors.
As shown by the following program, Splint doesn't seem
to catch a negative index in an array. (On line 11)
It generates however a spurious warning on line 12,
where it could perhaps infer that "n" is not negative.
|> 1 #include <assert.h>
|> 2 #include <stdio.h>
|> 3
|> 4 int main( void )
|> 5 {
|> 6 unsigned int a[3] = { 17, 19, 23 };
|> 7 const int n = 2;
|> 8
|> 9 if( n>=0 ) {
|> 10 assert( n>=0 );
|> 11 printf( "a[-2] = %u\n", a[-2] );
|> 12 printf( "result = %d\n", 19 >> n );
|> 13 }
|> 14
|> 15 return 0;
|> 16 }
#> [olheureu@WKS13 gnss 339] $ splint +boundswrite +boundsread ../tst5.c
#> Splint 3.0.1.6 --- 27 Mar 2002
#>
#> tst5.c: (in function main)
#> tst5.c:12:36: Right operand of >> may be negative (int): 19 >> n
#> The right operand to a shift operator may be negative (behavior undefined).
#> (Use -shiftnegative to inhibit warning)
#>
#> Finished checking --- 1 code warning
Do somebody has a clue to let Splint report the first
warning, and not the second?
Regards,
Olivier L'Heureux
--
Olivier L'Heureux
Septentrio NV, Belgium