Re: [releng_6 tinderbox] failure on sparc64/sparc64



On Sun, Feb 05, 2006 at 04:45:34PM +0100, Dag-Erling Smørgrav wrote:
Stefan Farfeleder <stefanf@xxxxxxxxxxx> writes:
On Sat, Feb 04, 2006 at 03:58:56PM -0700, M. Warner Losh wrote:
This driver wants to access these structures as arrays of uint32_t.
It used to cast directly, but that isn't allowed. So, I've passed
the cast through a (void *). Is that allowed? Eg:

struct foo foo;
((uint32_t *)(void *)&foo)[3] = 12;

is that OK?
I'm afraid that only silences the warning without solving the underlying
problem. I don't think there's a Standard conforming way to treat a
struct foo as an uint32_t array.

A union should do the trick.

No, it will not. If you have a struct foo and try to access it as an array
of int, the program will have unspecified (and maybe even undefined)
behaviour. It does not matter if you do it with a union or by casting
pointers.

In general, if you have an object of type X, then the only ways it can be
accessed is either as an object of type X, or as an array of [unsigned]
char.


--
<Insert your favourite quote here.>
Erik Trulsson
ertr1013@xxxxxxxxxxxxx
_______________________________________________
freebsd-arch@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-arch
To unsubscribe, send any mail to "freebsd-arch-unsubscribe@xxxxxxxxxxx"



Relevant Pages