#version 310 es

// Check name mangling of functions with parameters that are multi-dimensional arrays.

#define NX 2
#define NY 3
#define NZ 4
void f(bool a, float b, uint[4] c, int[NY][NX] d) {
}

void main() {
  int[NY][NX] d;
  f(false, 12.1, uint[NZ](uint(0),uint(1),uint(1),uint(2)), d);
}

buffer b {
    float u[];  // ERROR
    vec4 v[];
} name[3];

uniform ub {
    float u;
    vec4 v[];   // ERROR
} uname[3];

buffer b2 {
    float u;
    vec4 v[][];  // ERROR
} name2[3];

buffer b3 {
    float u; 
    vec4 v[][7];
} name3[3];

// General arrays of arrays

float[4][5][6] many[1][2][3];

float gu[][7];     // ERROR, size required
float g4[4][7];
float g5[5][7];

float[4][7] foo(float a[5][7])
{
    float r[7];
    r = a[2];
    float[](a[0], a[1], r, a[3]);              // ERROR, too few dims
    float[4][7][4](a[0], a[1], r, a[3]);       // ERROR, too many dims
    return float[4][7](a[0], a[1], r, a[3]);
    return float[][](a[0], a[1], r, a[3]);
    return float[][7](a[0], a[1], a[2], a[3]);
}

void bar(float[5][7]) {}

void foo2()
{
    {
        float gu[3][4][2];

        gu[2][4][1] = 4.0;                     // ERROR, overflow
    }
    vec4 ca4[3][2] = vec4[][](vec4[2](vec4(0.0), vec4(1.0)),
                              vec4[2](vec4(0.0), vec4(1.0)),
                              vec4[2](vec4(0.0), vec4(1.0)));
    vec4 caim[][2] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)),
                              vec4[2](vec4(4.0), vec4(2.0)),
                              vec4[2](vec4(4.0), vec4(2.0)));
    vec4 caim2[][] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)),
                              vec4[2](vec4(4.0), vec4(2.0)),
                              vec4[2](vec4(4.0), vec4(2.0)));
    vec4 caim3[3][] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)),
                               vec4[2](vec4(4.0), vec4(2.0)),
                               vec4[2](vec4(4.0), vec4(2.0)));

    g4 = foo(g5);
    g5 = g4;           // ERROR, wrong types
    gu = g4;           // ERROR, not yet sized

    foo(gu);           // ERROR, not yet sized
    bar(g5);

    if (foo(g5) == g4)
        ;
    if (foo(g5) == g5)  // ERROR, different types
        ;

    float u[5][7];
    u[5][2] = 5.0;      // ERROR
    foo(u);

    vec4 badAss[3];
    name[1].v[-1];     // ERROR
    name[1].v[1] = vec4(4.3);
    name[1].v = badAss;  // ERROR, bad assignemnt

    name3[0].v[1].length();  // 7
    name3[0].v.length();     // run time
}

struct badS {
    int sa[];     // ERROR
    int a[][];    // ERROR
    int b[][2];   // ERROR
    int c[2][];   // ERROR
    int d[][4];   // ERROR
};

in float inArray[2][3];    // ERROR
out float outArray[2][3];  // ERROR

uniform ubaa {
    int a;
} ubaaname[2][3];  // ERROR
