cast warnings

Michal Jaegermann michal at harddata.com
Wed Jan 28 20:34:24 UTC 2004


On Wed, Jan 28, 2004 at 12:57:41PM -0500, Gene C. wrote:
> Do the cast warning messages I see when compiling previously 32 bit 
> applications on the amd64 really mean all that much?

It depends.  They range from "hard to avoid noise" to "indicators of
killer bugs".  You can tell only on a case-by-case basis.

> 
> Now I understand that you do not want to store an 8 byte pointer into a 4 byte 
> variable or get a 8 byte pointer from a 4 byte variable.  If the code 
> underlying the calls does the "right thing" ...

If the code does really then "right thing" then you do not have a
warning; but sometimes it may be difficult to do that without
extensive rewrites.

> That is, is it worth the pain to go fix things 
> so that the cast messages do not occur?

Usually yes, in my experience; to an extent.  It helps immensly to
catch remaining bugs if a code is clean.  Very often doing that just
simply fixes nasty bugs.

Some "fun" things to trip you include a global variable for which
some library provided only an 'int' storage but you are writing
'long' there.  You will crash, or not, in an unrelated place
depending on what and when you overwrote in "other" four bytes.
Or things which change size in a way hard to notice across a
function call boundary, or places which rely implicitely and
silently on a sign extension which will not work the same in 32 and
64 bits. Or ... If you are using C++ then opportunities for various
size abuses, and difficulties of finding these, go up exponentially.

> I went to some effort to clean up nessus so building it had no cast messages.  
> But was it worth it.

Here you are. :-)

> For example, you have a function which extracts 
> something from an array/table and may return a pointer sometimes and other 
> times an integer.

Then really union should have been used; but sources of X, for
example, are chock-full of such junk and that's life.

   Michal





More information about the test mailing list