// https://issues.dlang.org/show_bug.cgi?id=24031 #include /**************************************/ struct ES { struct { char data[24]; }; int length; }; struct ES empty = {.data = {1}, .length = 2}; void test1() { assert(empty.data[0] == 1); assert(empty.length == 2); } /**************************************/ struct SH { int k; struct { struct { struct { int s; } f; }; }; }; struct SH data = (struct SH) { .k = 1, {{.f = {.s = 2}}} }; void test2() { assert(data.k == 1); assert(data.f.s == 2); } /**************************************/ // https://issues.dlang.org/show_bug.cgi?id=24266 struct S3 { int context[4]; int id; }; void test3() { struct S3 tn = (struct S3) {{1}, 4}; assert(tn.context[0] == 1); assert(tn.context[1] == 0); assert(tn.context[2] == 0); assert(tn.context[3] == 0); assert(tn.id == 4); } /**************************************/ // https://issues.dlang.org/show_bug.cgi?id=24274 struct S0 { struct { char short_data[24]; }; int length; }; void test4() { struct S0 s0 = { {.short_data = {1}}, .length = 2}; assert(s0.short_data[0] == 1); assert(s0.length == 2); } /**************************************/ struct S1 { struct { int long_data; char short_data[24]; }; int length; }; void test5() { struct S1 s1 = { {.short_data = {7}}, .length = 8}; assert(s1.long_data == 0); assert(s1.short_data[0] == 7); assert(s1.length == 8); } /**************************************/ struct S6 { int abc[4]; }; void test6() { struct S6 s = {{4},5,6,7}; assert(s.abc[0] == 4); assert(s.abc[1] == 0); assert(s.abc[2] == 0); assert(s.abc[3] == 0); struct S6 t = {4,{5},6,7}; assert(t.abc[0] == 4); assert(t.abc[1] == 5); assert(t.abc[2] == 6); assert(t.abc[3] == 7); } /**************************************/ // https://issues.dlang.org/show_bug.cgi?id=24495 struct Subitem { int x; int y; }; struct Item { int a; struct { int b1; struct Subitem b2; int b3; }; }; void test7() { struct Item first = { .a = 1, .b1 = 2, .b3 = 3, }; struct Item second = { .a = 1, { .b1 = 2, .b2 = { 1, 2 }, .b3 = 3 } }; assert(second.a == 1); assert(second.b1 == 2); assert(second.b2.x == 1); assert(second.b2.y == 2); assert(second.b3 == 3); } /**************************************/ // https://issues.dlang.org/show_bug.cgi?id=24277 struct S8 { int s; struct { int vis; int count; int id; struct { int symbol; int state; } leaf; }; }; struct S8 s8 = (struct S8) { .s = 10, { .count = 20, .id = 30, .leaf = {.symbol = 40, .state = 50}, } }; void test8() { assert(s8.id == 30); assert(s8.leaf.symbol == 40); assert(s8.leaf.state == 50); } /**************************************/ // https://github.com/dlang/dmd/issues/21210 struct Sa {int x, y;}; struct Sb { struct Sa v[1]; }; struct Sb s9 = {0}; void test9() { struct Sb v = {1}; __check(v.v[0].x == 1); __check(v.v[0].y == 0); struct Sb v2[1] = {1}; __check(v2[0].v[0].x == 1); __check(v2[0].v[0].y == 0); struct Sb v3[2] = {1, 2, 3, 4}; __check(v3[0].v[0].x == 1); __check(v3[0].v[0].y == 2); __check(v3[1].v[0].x == 3); __check(v3[1].v[0].y == 4); } /**************************************/ int main() { test1(); test2(); test3(); test4(); test5(); test6(); test7(); test8(); test9(); return 0; }