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