Subject: Re: archive.c/arm32
To: None <current-users@NetBSD.ORG>
From: Jaromir Dolecek <>
List: current-users
Date: 03/24/1998 17:19:17
Todd Vierling wrote:
> [Quotes from multiple people]
> : > In that case, I think that
> : > 	(int)val >= 0
> : > does the right thing in every useful case:
> : However, the original goal was to come up with an expression which
> : yields the correct result _and_ which avoids the gcc "comparison is
> : always 1 due to limited range of data type" warning.
> Better: fix gcc or to be able to disable a few -W options.  Then go and
> remove all similar workarounds from the entire code tree. 

The original code was really  bad (gcc _correctly_ complained about
"comparison ...."). Disabling warnings is a bit too short-term
"solution" ;)

> Short-circuit math is allowed to cause warnings like this in some cases (as
> a portability issue), but it should not be worked around when the
> short-circuit is intended.  That causes slower code at the expense of a
> so-called "clean compile."

The original code seem to work only with char which is signed by
default.  It would be definitely corrected - I see no reason why
should be gcc called brain damaged when it warn about this fact.

Shouldn't ((signed char)val >= 0) or ((unsigned char)var < 128) just do 
the same as original code has done ?

Am I missing something obvious ?

> : > ((int)val >= 0) yields the correct result, but also causes that
> : > warning.
> : 
> : No, it fails in implementations that have sizeof(char) == sizeof(int).
> Which is *not* an impossibility, y'know.
> : > a-HA.  Granted, a compiler is entitled to emit as many spurious messages
> : > as it likes, but this seems too clever by half...
> : 
> : That's why I really don't like the religious requirement of -Wall in our
> : compilation.
> You mean "-Wall -Werror"?...  As I said, fix gcc, don't borf your code
> because GCC is being dain bramaged. 

Jaromir Dolecek <>
It is better never to have been born.  But who among us has such luck?
One in a million, perhaps.