gcc doesn't warn that (unsigned > 0) is always true

Daniel Jacobowitz drow@mvista.com
Mon Oct 20 17:17:00 GMT 2003


On Mon, Oct 20, 2003 at 06:09:55PM +0200, David Calinski wrote:
> Hi all,
> 
> This may be a bit stupid, but as I run into problem once because of
> this...
> I think gcc should warn about it when "-Wall" is set.
> 
> Consider the following snip of code:
> 
> 
> /* gcc (3.3.2 with -Wall and -pedantic)
>  * doesn't warn that (unsigned > 0) is always true.
>  */
> 
> #include <stdio.h>
> 
> void a_loop (unsigned int in) {
>   int dumb = 0;
>   do {
>     ++dumb; /* anything here */
> 
>     /* Well, a lot of code can be here,
>      * almost all variables int _signed_,
>      * so a programmer may overlook that 'in' is_unsigned_  
>      */
>   } while (--in > 0);
> 
>   /* variable 'in' will be NEVER less than zero (it's unsigned),
>    * this is in fact an *endless* loop.
>    * It should be obvious that it wasn't programmer intention.
>    * Shouldn't gcc with -Wall warn about it?             
>    * Shouldn't gcc warn about all such obviously mistaken checks
>    * (unsigned > 0) that are always true?
>    */
> }

That is not an endless loop.  in == 0 will terminate it.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer



More information about the Gcc mailing list