blob: 0d1877a7bfdff9941cf9fb679d2b3aedc76f1396 [file] [log] [blame]
/* REQUIRED_ARGS: -preview=bitfields
*/
struct S
{
int a:2, b:4;
}
static assert(S.sizeof == 4);
void test1()
{
S s;
s.a = 3;
assert(s.a == -1);
s.b = 4;
assert(s.b == 4);
}
/******************************************/
struct S2
{
uint a:2, b:4;
}
S2 foo()
{
S2 s = { 7, 8 }; // test struct literal expressions
return s;
}
void test2()
{
S2 s = foo();
assert(s.a == 3);
assert(s.b == 8);
}
/******************************************/
struct S3
{
int i1;
uint a:2, b:4, c:6;
int i2;
}
static assert(S3.sizeof == 12);
S3 s3 = { 63, 7, 8 };
void test3()
{
assert(s3.i1 == 63);
assert(s3.a == 3);
assert(s3.b == 8);
assert(s3.c == 0);
assert(s3.i2 == 0);
}
/******************************************/
struct S4
{
int i1;
uint a:2, b:31;
}
static assert(S4.sizeof == 12);
S4 s4 = { 63, 7, 8 };
void test4()
{
assert(s4.i1 == 63);
assert(s4.a == 3);
assert(s4.b == 8);
}
/******************************************/
struct S5
{
int i1;
uint a:2, :0, b:5;
}
static assert(S5.sizeof == 12);
S5 s5 = { 63, 7, 8 };
void test5()
{
assert(s5.i1 == 63);
assert(s5.a == 3);
assert(s5.b == 8);
}
/******************************************/
// https://issues.dlang.org/show_bug.cgi?id=22710
struct S6
{
uint a:2, b:2;
}
int boo6()
{
S s;
s.a = 3;
s.b = 1;
s.a += 2;
return s.a;
}
void test6()
{
//printf("res: %d\n", test());
assert(boo6() == 1);
}
/******************************************/
// https://issues.dlang.org/show_bug.cgi?id=22710
struct S7
{
uint a:2, b:2;
int c:2, d:2;
}
int test7u()
{
S7 s;
s.a = 7;
s.b = 1;
s.a += 2;
return s.a;
}
int test7s()
{
S7 s;
s.c = 7;
s.d = 1;
s.c += 4;
return s.c;
}
int test7s2()
{
S7 s;
s.c = 7;
s.d = 2;
s.c += 4;
return s.d;
}
void test7()
{
//printf("uns: %d\n", test7u());
assert(test7u() == 1);
//printf("sig: %d\n", test7s());
assert(test7s() == -1);
assert(test7s2() == -2);
}
static assert(test7u() == 1);
static assert(test7s() == -1);
static assert(test7s2() == -2);
/******************************************/
int main()
{
test1();
test2();
test3();
test4();
test5();
test6();
test7();
return 0;
}