// 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);
}