This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: gcc doesn't warn that (unsigned > 0) is always true
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: David Calinski <neodave at gmx dot net>
- Cc: gcc at gcc dot gnu dot org
- Date: Mon, 20 Oct 2003 12:12:08 -0400
- Subject: Re: gcc doesn't warn that (unsigned > 0) is always true
- References: <1066664752.31445.ezmlm@gcc.gnu.org> <20031020180955.1077706a.neodave@gmx.net>
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