1617a3babSopenharmony_ci#version 430
2617a3babSopenharmony_ci
3617a3babSopenharmony_cifloat[4][5][6] many[1][2][3];
4617a3babSopenharmony_ci
5617a3babSopenharmony_cifloat gu[][7];
6617a3babSopenharmony_cifloat gimp[][];    // ERROR, implicit inner
7617a3babSopenharmony_cifloat g4[4][7];
8617a3babSopenharmony_cifloat g5[5][7];
9617a3babSopenharmony_ci
10617a3babSopenharmony_cifloat[4][7] foo(float a[5][7])
11617a3babSopenharmony_ci{
12617a3babSopenharmony_ci    float r[7];
13617a3babSopenharmony_ci    r = a[2];
14617a3babSopenharmony_ci    float[](a[0], a[1], r, a[3]);              // ERROR, too few dims
15617a3babSopenharmony_ci    float[4][7][4](a[0], a[1], r, a[3]);       // ERROR, too many dims
16617a3babSopenharmony_ci    return float[4][7](a[0], a[1], r, a[3]);
17617a3babSopenharmony_ci    return float[][](a[0], a[1], r, a[3]);
18617a3babSopenharmony_ci    return float[][7](a[0], a[1], a[2], a[3]);
19617a3babSopenharmony_ci}
20617a3babSopenharmony_ci
21617a3babSopenharmony_civoid bar(float[5][7]) {}
22617a3babSopenharmony_ci
23617a3babSopenharmony_civoid main()
24617a3babSopenharmony_ci{
25617a3babSopenharmony_ci    {
26617a3babSopenharmony_ci        float gu[3][4][2];
27617a3babSopenharmony_ci
28617a3babSopenharmony_ci        gu[2][4][1] = 4.0;                     // ERROR, overflow
29617a3babSopenharmony_ci    }
30617a3babSopenharmony_ci    vec4 ca4[3][2] = vec4[][](vec4[2](vec4(0.0), vec4(1.0)),
31617a3babSopenharmony_ci                              vec4[2](vec4(0.0), vec4(1.0)),
32617a3babSopenharmony_ci                              vec4[2](vec4(0.0), vec4(1.0)));
33617a3babSopenharmony_ci    vec4 caim[][2] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)),
34617a3babSopenharmony_ci                              vec4[2](vec4(4.0), vec4(2.0)),
35617a3babSopenharmony_ci                              vec4[2](vec4(4.0), vec4(2.0)));
36617a3babSopenharmony_ci    vec4 caim2[][] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)),
37617a3babSopenharmony_ci                              vec4[2](vec4(4.0), vec4(2.0)),
38617a3babSopenharmony_ci                              vec4[2](vec4(4.0), vec4(2.0)));
39617a3babSopenharmony_ci    vec4 caim3[3][] = vec4[][](vec4[2](vec4(4.0), vec4(2.0)),
40617a3babSopenharmony_ci                               vec4[2](vec4(4.0), vec4(2.0)),
41617a3babSopenharmony_ci                               vec4[2](vec4(4.0), vec4(2.0)));
42617a3babSopenharmony_ci
43617a3babSopenharmony_ci    vec4 a4[3][2] = {vec4[](vec4(0.0), vec4(1.0)),
44617a3babSopenharmony_ci                     vec4[2](vec4(0.0), vec4(1.0)),
45617a3babSopenharmony_ci                     vec4[2](vec4(0.0), vec4(1.0)) };
46617a3babSopenharmony_ci    vec4 aim[][2] = {vec4[2](vec4(4.0), vec4(2.0)),
47617a3babSopenharmony_ci                     vec4[](vec4(4.0), vec4(2.0)),
48617a3babSopenharmony_ci                     vec4[2](vec4(4.0), vec4(2.0)) };
49617a3babSopenharmony_ci    vec4 aim2[][] = {vec4[2](vec4(4.0), vec4(2.0)),
50617a3babSopenharmony_ci                     vec4[2](vec4(4.0), vec4(2.0)),
51617a3babSopenharmony_ci                     vec4[](vec4(4.0), vec4(2.0)) };
52617a3babSopenharmony_ci    vec4 aim3[3][] = {vec4[2](vec4(4.0), vec4(2.0)),
53617a3babSopenharmony_ci                      vec4[2](vec4(4.0), vec4(2.0)),
54617a3babSopenharmony_ci                      vec4[2](vec4(4.0), vec4(2.0)) };
55617a3babSopenharmony_ci
56617a3babSopenharmony_ci    vec4 bad2[3][] = {vec4[2](vec4(4.0), vec4(2.0)),              // ERROR
57617a3babSopenharmony_ci                      vec4[3](vec4(4.0), vec4(2.0), vec4(5.0)),
58617a3babSopenharmony_ci                      vec4[2](vec4(4.0), vec4(2.0)) };
59617a3babSopenharmony_ci
60617a3babSopenharmony_ci    vec4 bad3[3][] = {vec4[3](vec4(4.0), vec4(2.0), vec4(5.0)),   // ERROR
61617a3babSopenharmony_ci                      vec4[2](vec4(4.0), vec4(2.0)),
62617a3babSopenharmony_ci                      vec4[2](vec4(4.0), vec4(2.0)) };
63617a3babSopenharmony_ci
64617a3babSopenharmony_ci    vec4 bad4[4][] = {vec4[2](vec4(4.0), vec4(2.0)),              // ERROR
65617a3babSopenharmony_ci                      vec4[2](vec4(4.0), vec4(2.0)),
66617a3babSopenharmony_ci                      vec4[2](vec4(4.0), vec4(2.0)) };
67617a3babSopenharmony_ci
68617a3babSopenharmony_ci
69617a3babSopenharmony_ci    g4 = foo(g5);
70617a3babSopenharmony_ci    g5 = g4;           // ERROR, wrong types
71617a3babSopenharmony_ci    gu = g4;           // ERROR, not yet sized
72617a3babSopenharmony_ci
73617a3babSopenharmony_ci    foo(gu);           // ERROR, not yet sized
74617a3babSopenharmony_ci    bar(g5);
75617a3babSopenharmony_ci
76617a3babSopenharmony_ci    if (foo(g5) == g4)
77617a3babSopenharmony_ci        ;
78617a3babSopenharmony_ci    if (foo(g5) == g5)  // ERROR, different types
79617a3babSopenharmony_ci        ;
80617a3babSopenharmony_ci
81617a3babSopenharmony_ci    float u[][7];
82617a3babSopenharmony_ci    u[2][2] = 3.0;
83617a3babSopenharmony_ci    float u[5][7];
84617a3babSopenharmony_ci    u[5][2] = 5.0;      // ERROR
85617a3babSopenharmony_ci    foo(u);
86617a3babSopenharmony_ci}
87617a3babSopenharmony_ci
88617a3babSopenharmony_civoid foo3()
89617a3babSopenharmony_ci{
90617a3babSopenharmony_ci    float resize1[][5][7];
91617a3babSopenharmony_ci    resize1.length();           // ERROR
92617a3babSopenharmony_ci    resize1[1][4][5] = 2.0;
93617a3babSopenharmony_ci    resize1.length();           // ERROR
94617a3babSopenharmony_ci    float resize1[3][5][7];
95617a3babSopenharmony_ci    resize1.length();           // 3 in AST
96617a3babSopenharmony_ci    resize1[1].length();        // 5 in AST
97617a3babSopenharmony_ci    resize1[1][1].length();     // 7 in AST
98617a3babSopenharmony_ci    resize1[1][1][1].length();  // ERROR
99617a3babSopenharmony_ci
100617a3babSopenharmony_ci    float resize2[][5][7];
101617a3babSopenharmony_ci    float resize2[3][4][7];     // ERROR, inner dim change
102617a3babSopenharmony_ci
103617a3babSopenharmony_ci    float resize3[][5][7];
104617a3babSopenharmony_ci    float resize3[3][5][9];     // ERROR, inner dim changed
105617a3babSopenharmony_ci
106617a3babSopenharmony_ci    float resize4[][5][7];
107617a3babSopenharmony_ci    int  resize4[3][5][7];      // ERROR, element type
108617a3babSopenharmony_ci}
109