lindquist@88: module union7; lindquist@88: lindquist@88: pragma(LLVM_internal, "notypeinfo") lindquist@88: struct Union lindquist@88: { lindquist@88: union { lindquist@88: double g; lindquist@88: struct { lindquist@88: short s1,s2,s3,s4; lindquist@88: } lindquist@88: } lindquist@88: union { lindquist@88: float f; lindquist@88: long l; lindquist@88: } lindquist@88: } lindquist@88: lindquist@88: Union a = { f:4f }; lindquist@88: Union b = { 3.0, f:2 }; lindquist@88: Union c = { l:42, g:2.0 }; lindquist@88: Union d = { s2:3 }; lindquist@88: Union e = { s1:3, s4:4, l:5 }; lindquist@88: lindquist@88: void main() lindquist@88: { lindquist@88: assert(a.f == 4f); lindquist@88: assert(a.g !<>= 0.0); lindquist@88: assert((a.l>>>32) == 0); lindquist@88: lindquist@88: assert(b.g == 3.0); lindquist@88: assert(b.f == 2f); lindquist@88: lindquist@88: assert(c.l == 42); lindquist@88: assert(c.g == 2.0); lindquist@88: lindquist@88: assert(d.s1 == 0); lindquist@88: assert(d.s2 == 3); lindquist@88: assert(d.s3 == 0); lindquist@88: assert(d.s4 == 0); lindquist@88: {assert(d.f !<>= 0f);} lindquist@88: {} lindquist@88: assert(e.s1 == 3); lindquist@88: assert(e.s2 == 0); lindquist@88: assert(e.s3 == 0); lindquist@88: {assert(e.s4 == 4);} lindquist@88: {} lindquist@88: assert(e.l == 5); lindquist@88: }