1 // https://bugzilla.gdcproject.org/show_bug.cgi?id=186 2 // { dg-do run } 3 // { dg-skip-if "needs gcc/config.d" { ! d_runtime } } 4 5 struct S186 6 { 7 union 8 { 9 struct 10 { 11 ubyte fieldA; 12 byte fieldB = -1; 13 byte fieldC = -1; 14 } 15 size_t _complete; 16 } 17 thisS18618 this(size_t complete) 19 { 20 this._complete = complete; 21 } 22 } 23 24 static if (size_t.sizeof == 8) 25 enum checkval = 0x0200000000000002; 26 else 27 enum checkval = 0x02000002; 28 check186(in S186 obj,byte fieldB)29void check186(in S186 obj, byte fieldB) 30 { 31 assert(obj.fieldA == 2); 32 assert(obj.fieldB == 0); 33 assert(obj.fieldC == 0); 34 assert(obj._complete == checkval); 35 assert(fieldB == 0); 36 } 37 test186(size_t val)38void test186(size_t val) 39 { 40 S186 obj = S186(val); 41 check186(obj, obj.fieldB); 42 43 assert(obj.fieldA == 2); 44 assert(obj.fieldB == 0); 45 assert(obj.fieldC == 0); 46 assert(obj._complete == checkval); 47 48 obj = S186(val); 49 check186(obj, obj.fieldB); 50 51 assert(obj.fieldA == 2); 52 assert(obj.fieldB == 0); 53 assert(obj.fieldC == 0); 54 assert(obj._complete == checkval); 55 } 56 main()57void main() 58 { 59 test186(checkval); 60 } 61