1#version 300 es
2precision highp float;
3uniform int c, d;
4in highp float x;
5
6void main()
7{
8    float f;
9    int a[2];
10
11    switch(f) {      // ERROR
12    }
13
14    switch(a) {      // ERROR
15    }
16
17    switch(c)
18    {
19    }
20
21    switch(c)        // WARNING, not enough stuff after last label
22    {
23    case 2:
24    }
25
26    switch(c)
27    {
28        f = sin(x);   // ERRROR
29    case 2:
30        f = cos(x);
31        break;
32    }
33
34    switch (c) {
35    default:
36        break;
37    case 1:
38        f = sin(x);
39        break;
40    case 2:
41        f = cos(x);
42        break;
43    default:           // ERROR, 2nd default
44        f = tan(x);
45    }
46
47    switch (c) {
48    case 1:
49        f = sin(x);
50        break;
51    case 2:
52        switch (d) {
53        case 1:
54            f = x * x * x;
55            break;
56        case 2:
57            f = x * x;
58            break;
59        }
60        break;
61    default:
62        f = tan(x);
63    case 1:           // ERROR, 2nd 'case 1'
64        break;
65    case 3.8:         // ERROR, non-int
66        break;
67    case c:           // ERROR, non-constant
68        break;
69    }
70
71    switch (c) {      // a no-error normal switch
72    case 1:
73        f = sin(x);
74        break;
75    case 2:
76        switch (d) {
77        case 1:
78            f = x * x * x;
79            break;
80        case 2:
81            f = x * x;
82            break;
83        }
84        break;
85    default:
86        f = tan(x);
87    }
88
89    break;            // ERROR
90
91    switch (c) {
92    case 1:
93        f = sin(x);
94        break;
95    case 2:
96        switch (d) {
97        case 1:
98            {
99                case 4:        // ERROR
100                    break;
101            }
102            f = x * x * x;
103            if (c < d) {
104                case 2:         // ERROR
105                    f = x * x;
106            }
107            if (d < c)
108                case 3:         // ERROR
109            break;
110        }
111        break;
112    case 4:
113        f = tan(x);
114        if (f < 0.0)
115            default:            // ERROR
116                break;
117    }
118
119    case 5:  // ERROR
120    default: // ERROR
121
122    switch (0) {
123        default:
124        int onlyInSwitch = 0;
125    }
126    onlyInSwitch;   // ERROR
127
128    switch (0) {
129        default:
130            int x;  // WARNING (was "no statement" ERROR, but spec. changed because unclear what a statement is)
131    }
132
133    switch (c) {
134    case 1:
135    {
136        int nestedX;
137        break;
138    }
139    case 2:
140        nestedX;    // ERROR
141        int nestedZ;
142        float a;    // okay, hiding outer 'a'
143        break;
144    case 3:
145        int linearZ;
146        break;
147        break;
148    case 4:
149        int linearY = linearZ;
150        break;
151    case 5:         // okay that branch bypassed an initializer
152        const int linearC = 4;
153        break;
154    case 6:         // okay that branch bypassed an initializer
155        linearC;
156    }
157    nestedZ;        // ERROR, no longer in scope
158}
159