| // https://bugzilla.gdcproject.org/show_bug.cgi?id=186 |
| // { dg-do run } |
| // { dg-skip-if "needs gcc/config.d" { ! d_runtime } } |
| |
| struct S186 |
| { |
| union |
| { |
| struct |
| { |
| ubyte fieldA; |
| byte fieldB = -1; |
| byte fieldC = -1; |
| } |
| size_t _complete; |
| } |
| |
| this(size_t complete) |
| { |
| this._complete = complete; |
| } |
| } |
| |
| static if (size_t.sizeof == 8) |
| enum checkval = 0x0200000000000002; |
| else |
| enum checkval = 0x02000002; |
| |
| void check186(in S186 obj, byte fieldB) |
| { |
| assert(obj.fieldA == 2); |
| assert(obj.fieldB == 0); |
| assert(obj.fieldC == 0); |
| assert(obj._complete == checkval); |
| assert(fieldB == 0); |
| } |
| |
| void test186(size_t val) |
| { |
| S186 obj = S186(val); |
| check186(obj, obj.fieldB); |
| |
| assert(obj.fieldA == 2); |
| assert(obj.fieldB == 0); |
| assert(obj.fieldC == 0); |
| assert(obj._complete == checkval); |
| |
| obj = S186(val); |
| check186(obj, obj.fieldB); |
| |
| assert(obj.fieldA == 2); |
| assert(obj.fieldB == 0); |
| assert(obj.fieldC == 0); |
| assert(obj._complete == checkval); |
| } |
| |
| void main() |
| { |
| test186(checkval); |
| } |