On 2010-01-06 03:31:46 +0100, Erik Trulsson wrote: > Even with your interpretation of the C99 standard that example would be > allowed only if '*pu' is a valid lvalue of type 'union u'. (Since pu->x > is equivalent to (*pu).x) > > First of all the conversion (union u*)&i is valid only if the alignment > of 'i' is suitable for an object of type 'union u'. Lets assume that is the > case. (Otherwise just making that conversion would result in undefined > behaviour.) (See 6.3.2.3 clause 7.) > > There is however no guarantee that the conversion yields a valid "pointer to > union u". If not then dereferencing it (with the expression '*pu') has > undefined behaviour. (See 6.5.3.2 clause 4)
I wonder what you mean by "valid pointer to union u". If alignment is OK, the pointer itself is valid. The only problem could be memory representation. I wonder whether 6.2.5p20 could be sufficient if there are no padding bytes. -- Vincent Lefèvre <vinc...@vinc17.net> - Web: <http://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / Arénaire project (LIP, ENS-Lyon)