view test/union5.d @ 167:adca7f32fb6d trunk

[svn r183] Fixed broken identity expressions with two pointers of different types. Fixed broken pointer arithmetic for subtraction (tango.text.Util unittest now passes)
author lindquist
date Tue, 06 May 2008 01:23:02 +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));
}