2003-08-11 08:54:54

by Alex Davis

[permalink] [raw]
Subject: Warnings building 2.4.22rc2 with gcc 3.3

When I build 2.4.22rc2 with gcc 3.3, I get the following warnings


vt.c:166: warning: comparison is always false due to limited range of data type
vt.c:283: warning: comparison is always false due to limited range of data type
keyboard.c:644: warning: comparison is always true due to limited range of data type

It seems an unsigned char is being compared with 256, which always returns false.

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com


2003-08-11 15:27:05

by Alex Davis

[permalink] [raw]
Subject: Re: Warnings building 2.4.22rc2 with gcc 3.3

Any ideas?

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

2003-08-11 15:50:31

by Willy Tarreau

[permalink] [raw]
Subject: Re: Warnings building 2.4.22rc2 with gcc 3.3

On Mon, Aug 11, 2003 at 01:54:53AM -0700, Alex Davis wrote:
> When I build 2.4.22rc2 with gcc 3.3, I get the following warnings
>
>
> vt.c:166: warning: comparison is always false due to limited range of data type
> vt.c:283: warning: comparison is always false due to limited range of data type
> keyboard.c:644: warning: comparison is always true due to limited range of data type
>
> It seems an unsigned char is being compared with 256, which always returns false.

For keyboard.c, the test is :

if (value < SIZE(func_table)) {

so it's reassuring that any value is contained in the table. We could hide
the warning with a cast of value to (int).

for vt.c, it's the same concept, some bounds are enforced on some values, and
in the event they would be violated, -EINVAL would be returned. So the check,
even if useless here, has some sense. Here again, a cast could hide the
warnings, but may generate useless code.

Cheers,
Willy

Subject: Re: Warnings building 2.4.22rc2 with gcc 3.3

Willy,

Em Seg, 2003-08-11 ?s 12:50, Willy Tarreau escreveu:
> On Mon, Aug 11, 2003 at 01:54:53AM -0700, Alex Davis wrote:
> > When I build 2.4.22rc2 with gcc 3.3, I get the following warnings
> >
> >
> > vt.c:166: warning: comparison is always false due to limited range of data type
> > vt.c:283: warning: comparison is always false due to limited range of data type
> > keyboard.c:644: warning: comparison is always true due to limited range of data type
> >
> > It seems an unsigned char is being compared with 256, which always returns false.
>
> For keyboard.c, the test is :
>
> if (value < SIZE(func_table)) {
>
> so it's reassuring that any value is contained in the table. We could hide
> the warning with a cast of value to (int).

I'm getting it in 2.6.0-test3(-mm1) too. The problem (I think) is
that the ''if'' is aways true because ''value'' never will be > than
''SIZE(func_table)''.

The cast does not solve the problem, because ''value'' have just
8 bits (unsigned char) used, in other words, with the cast
the ''if'' will continue to be true.

--
Luiz Fernando N. Capitulino

<[email protected]>
<http://www.telecentros.sp.gov.br>