Re: Intermediate void* casts

Bill Studenmund <[email protected]>
Newsgroups gmane.os.netbsd.devel.general,gmane.os.netbsd.devel.kernel,gmane.os.netbsd.devel.userlevel
Message-ID <Pine.NEB.4.33.0308101701360.15312-100000@vespasia.home-net.icnt.net>
On Sun, 10 Aug 2003, Martin Husemann wrote:

> Hi folks,
>
> sorry for the cross-post, please be sure to only reply to tech-misc to
> avoid spreading this flame fest over various mailing lists.
>
> Since we will switch to gcc3.3.1 soon and already had first problems
> with incorrect code due to alias bugs, I think we should have a kind
> of a mini audit for these. Usually gcc 3.3.1 warns about this kind
> of problems, but it shuts up if an intermediate void* cast is involved.
> So I tried to find dubious casts to pointer types after casts to void*.

Thanks! This will certainly help us.

Though what exactly is an alias bug?

[snip]

> The latter point needs manual judgement from someone comfortable with that
> area of the source tree. Possible solutions in that case inlcude:
>  - just leave the (void*) in place if alias problems are not possible
>    according to manual verification. We should not let the compiler stop
>    us doing clever things, if we know what we are doing.
>  - rewrite the expression completely to avoid the aliases
>    I did this with svr_machdep code for sparc*, where the address of a 64bit
>    value was casted to a 32bit pointer to access the two halves of the value.
>    Easy to replace with shift/mask expressions. Even clearer IMHO and might
>    give the compiler better optimization hints.
>    This was the case for bswap64 too (which is the problem that triggered
>    all this)

I'm not so sure about that. Can/will the compiler notice that you're only
using half of a 64-bit value? Otherwise, by making this change, you're
pulling in more 64-bit using code. For sparc64 that's not bad, since the
registers are 64-bit. But for sparc, 64-bit values won't fit in a
register, and so manipulating them can be cumbersome.

Yes, I realize that if we're talking about a 64-bit value, other bits of
code are having to deal with the difficulties of 64-bit math & such. But
if there's a place where we can make the code more efficient than the
compiler will on its own, I think we should.

Take care,

Bill
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.