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)29 void 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)38 void 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()57 void main()
58 {
59     test186(checkval);
60 }
61