#version 300 es precision highp float; uniform int c, d; in highp float x; void main() { float f; int a[2]; switch(f) { // ERROR } switch(a) { // ERROR } switch(c) { } switch(c) // WARNING, not enough stuff after last label { case 2: } switch(c) { f = sin(x); // ERRROR case 2: f = cos(x); break; } switch (c) { default: break; case 1: f = sin(x); break; case 2: f = cos(x); break; default: // ERROR, 2nd default f = tan(x); } switch (c) { case 1: f = sin(x); break; case 2: switch (d) { case 1: f = x * x * x; break; case 2: f = x * x; break; } break; default: f = tan(x); case 1: // ERROR, 2nd 'case 1' break; case 3.8: // ERROR, non-int break; case c: // ERROR, non-constant break; } switch (c) { // a no-error normal switch case 1: f = sin(x); break; case 2: switch (d) { case 1: f = x * x * x; break; case 2: f = x * x; break; } break; default: f = tan(x); } break; // ERROR switch (c) { case 1: f = sin(x); break; case 2: switch (d) { case 1: { case 4: // ERROR break; } f = x * x * x; if (c < d) { case 2: // ERROR f = x * x; } if (d < c) case 3: // ERROR break; } break; case 4: f = tan(x); if (f < 0.0) default: // ERROR break; } case 5: // ERROR default: // ERROR switch (0) { default: int onlyInSwitch = 0; } onlyInSwitch; // ERROR switch (0) { default: int x; // WARNING (was "no statement" ERROR, but spec. changed because unclear what a statement is) } switch (c) { case 1: { int nestedX; break; } case 2: nestedX; // ERROR int nestedZ; float a; // okay, hiding outer 'a' break; case 3: int linearZ; break; break; case 4: int linearY = linearZ; break; case 5: // okay that branch bypassed an initializer const int linearC = 4; break; case 6: // okay that branch bypassed an initializer linearC; } nestedZ; // ERROR, no longer in scope }