[svn r80] Fixed union literals

This commit is contained in:
Tomas Lindquist Olsen
2007-10-31 07:24:02 +01:00
parent 0e0d7eca12
commit fcdb174faf
3 changed files with 90 additions and 42 deletions

16
test/union4.d Normal file
View File

@@ -0,0 +1,16 @@
module union4;
pragma(LLVM_internal, "notypeinfo")
union U {
struct { float x,y,z; }
float[3] xyz;
}
void main() {
const float[3] a = [1f,2,3];
U u = U(1,2,3);
assert(u.xyz == a);
assert(u.x == 1);
assert(u.y == 2);
assert(u.z == 3);
}

39
test/union5.d Normal file
View File

@@ -0,0 +1,39 @@
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));
}