// PERMUTE_ARGS:

/******************************************/

static int bigarray[100][100];

void test1()
{
  for (int i = 0; i < 100; i += 1)
  {
    for (int j = 0; j < 100; j += 1)
    {
      //printf("Array %i %i\n", i, j);
      bigarray[i][j] = 0;
    }
  }
}

/******************************************/
// 10629

class Foo10629 {}

struct Bar10629
{
    void[__traits(classInstanceSize, Foo10629)] x;
}

/******************************************/
// 11233

struct S11233
{
    uint[0x100000] arr;
}

/******************************************/
// 11672

void test11672()
{
    struct V { float f; }
    struct S
    {
        V[3] v = V(1);
    }

    S s;
    assert(s.v == [V(1), V(1), V(1)]); /* was [V(1), V(nan), V(nan)] */
}

/******************************************/
// 12509

struct A12509
{
    int member;
}
struct B12509
{
    A12509[0x10000] array;
}

/******************************************/
// 13505

class C13505 { void[10] x; }
struct S13505 { void[10] x; }

void test13505()
{
    auto c = new C13505();
    auto s = S13505();
}

/******************************************/
// 14699

struct S14699a { ubyte[0][10] values; }
struct S14699b { S14699a tbl; }
// +/

ubyte[0][1] sa14699;

void test14699()
{
    //auto p = &sa14699;  // Cannot work in Win32 (OMF)
}

/******************************************/
// 14805

struct S14805
{
    ushort one;
}
auto a14805 = new S14805[513*513];

/******************************************/
// 15664

struct Data15664A
{
    int[2] a;
    int[2][2] b;
    int c;
}

             Data15664A d15664a1 = {[1, 2], [[3, 4], [5, 6]], 7};   // OK
       const Data15664A d15664a2 = {[1, 2], [[3, 4], [5, 6]], 7};   // OK <- NG
shared       Data15664A d15664a3 = {[1, 2], [[3, 4], [5, 6]], 7};   // OK <- NG
shared const Data15664A d15664a4 = {[1, 2], [[3, 4], [5, 6]], 7};   // OK <- NG
   immutable Data15664A d15664a5 = {[1, 2], [[3, 4], [5, 6]], 7};   // OK <- NG

struct Data15664B
{
    int[2] a;
    const int[2][2] b;
    int c;
}

             Data15664B d15664b1 = {[1, 2], [[3, 4], [5, 6]], 7};   // OK
       const Data15664B d15664b2 = {[1, 2], [[3, 4], [5, 6]], 7};   // OK
shared       Data15664B d15664b3 = {[1, 2], [[3, 4], [5, 6]], 7};   // OK <- NG
shared const Data15664B d15664b4 = {[1, 2], [[3, 4], [5, 6]], 7};   // OK <- NG
   immutable Data15664B d15664b5 = {[1, 2], [[3, 4], [5, 6]], 7};   // OK <- NG

void test15664()
{
    assert(d15664a1.a == [1, 2]);
    assert(d15664a2.a == [1, 2]);
    assert(d15664a3.a == cast(shared)[1, 2]);
    assert(d15664a4.a == cast(shared)[1, 2]);
    assert(d15664a5.a == [1, 2]);
    assert(d15664a1.b == [[3, 4], [5, 6]]);
    assert(d15664a2.b == [[3, 4], [5, 6]]);
    assert(d15664a3.b == cast(shared)[[3, 4], [5, 6]]);
    assert(d15664a4.b == cast(shared)[[3, 4], [5, 6]]);
    assert(d15664a5.b == [[3, 4], [5, 6]]);
    assert(d15664a1.c == 7);    // OK
    assert(d15664a2.c == 7);    // OK <- BG
    assert(d15664a3.c == 7);    // OK <- NG
    assert(d15664a4.c == 7);    // OK <- NG
    assert(d15664a5.c == 7);    // OK <- NG

    assert(d15664b1.a == [1, 2]);
    assert(d15664b2.a == [1, 2]);
    assert(d15664b3.a == cast(shared)[1, 2]);
    assert(d15664b4.a == cast(shared)[1, 2]);
    assert(d15664b5.a == [1, 2]);
    assert(d15664b1.b == [[3, 4], [5, 6]]);
    assert(d15664b2.b == [[3, 4], [5, 6]]);
    assert(d15664b3.b == cast(shared)[[3, 4], [5, 6]]);
    assert(d15664b4.b == cast(shared)[[3, 4], [5, 6]]);
    assert(d15664b5.b == [[3, 4], [5, 6]]);
    assert(d15664b1.c == 7);    // OK
    assert(d15664b2.c == 7);    // OK
    assert(d15664b3.c == 7);    // OK <- NG
    assert(d15664b4.c == 7);    // OK <- NG
    assert(d15664b5.c == 7);    // OK <- NG
}

/******************************************/

int main()
{
    test1();
    test11672();
    test15664();

    return 0;
}
