Kai Henningsen wrote: > ian@airs.com (Ian Lance Taylor) wrote on 20.01.06 in > <[EMAIL PROTECTED]>: > >> When dealing with unions, you can take pointers to different fields in >> the unions. If the fields have different types, these pointers can >> have non-conflicting alias sets. Therefore within a single union the >> same memory can be read or written by different pointers. This is >> considered to be invalid--a valid program is required to always access >> the memory within the union in the same type, except if you access the >> memory via the union type itself (this permission being a gcc >> extension). > > void test(void) > { > union { int i; double d; } u; > int *ip; > double *dp; > int ii; > double dd; > > ip = &u.i; > *ip = 15; > ii = *ip; > dp = &u.d; > *dp = 1.5; > dd = *dp; > printf("ii=%d dd=%f\n", ii, dd); > } > > So you're saying this function is not valid? > > MfG Kai
I think he's saying that _this_ one might generate invalid code: void test(void) { union { int i; double d; } u; int *ip; double *dp; int ii; double dd; dp = &u.d; ip = &u.i; *ip = 15; ii = *ip; *dp = 1.5; dd = *dp; printf("ii=%d dd=%f\n", ii, dd); } cheers, DaveK -- Can't think of a witty .sigline today....