#version 310 es
precision mediump float;
uniform int c, d;
in float x;
out float color;
uniform vec4 v;

vec4 foo1(vec4 v1, vec4 v2, int i1)
{
    switch (i1)
    {
    case 0:
        return v1;
    case 2:
    case 1:
        return v2;
    case 3:
        return v1 * v2;
    }

    return vec4(0.0);
}

vec4 foo2(vec4 v1, vec4 v2, int i1)
{
    switch (i1)
    {
    case 0:
        return v1;
    case 2:
        return vec4(1.0);
    case 1:
        return v2;
    case 3:
        return v1 * v2;
    }

    return vec4(0.0);
}

void main()
{
    float f;
    int a[2];
    int local = c;

    switch(++local)
    {
    }

    switch (c) {
    case 1:
        f = sin(x);
        break;
    case 2:
        f = cos(x);
        break;
    default:
        f = tan(x);
    }

    switch (c) {
    case 1:
        f += sin(x);
    case 2:
        f += cos(x);
        break;
    default:
        f += tan(x);
    }

    switch (c) {
    case 1:
        f += sin(x);
        break;
    case 2:
        f += cos(x);
        break;
    }

    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);
    }

    for (int i = 0; i < 10; ++i) {
        switch (c) {
        case 1:
            f += sin(x);
            for (int j = 20; j < 30; ++j) {
                ++f;
                if (f < 100.2)
                    break;
            }
            break;
        case 2:
            f += cos(x);
            break;
            break;
        default:
            f += tan(x);
        }

        if (f < 3.43)
            break;
    }

    switch (c) {
    case 1:
        f += sin(x);
        break;
    case 2:
        // test no statements at end
    }

    color = f + float(local);

    color += foo1(v,v,c).y;
    color += foo2(v,v,c).z;

    switch (c) {
    case 0: break;
    default:
    }

    switch (c) {
    default:
    }
}
