mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-02-28 17:43:14 +01:00
[svn r80] Fixed union literals
This commit is contained in:
16
test/union4.d
Normal file
16
test/union4.d
Normal 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
39
test/union5.d
Normal 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));
|
||||
}
|
||||
Reference in New Issue
Block a user