view test/union5.d @ 215:a58d8f4b84df trunk

[svn r231] Changed: warnings are no longer treated as an error. Added some comments and cleaned up CallExp::toElem a tiny bit. Fixed: struct literals always reported inplace assignment even if they allocated a temporary. Fixed: passing stuff to a D-style vararg which did inplace assignment was generated suboptimal code.
author lindquist
date Tue, 03 Jun 2008 13:51:09 +0200
parents 9e1bd80a7e98
children
line wrap: on
line source

module union5;

pragma(LLVM_internal, "notypeinfo")
{
    union S
    {
        T t;
        U u;
        uint i;
        struct {
            ushort sl,sh;
        }
    }

    struct T
    {
        int i;
    }

    struct U
    {
        float f;
    }
}

void main()
{
    S s;
    assert(s.t.i == 0);
    assert(s.u.f == 0);
    s.t.i = -1;
    assert(s.i == 0xFFFF_FFFF);
    float f = 3.1415;
    s.u.f = f;
    uint pi = *cast(uint*)&f;
    assert(s.i == pi);
    assert(s.sl == (pi&0xFFFF));
    assert(s.sh == (pi>>>16));
}