#version 400

flat in ivec4 uiv4;
in vec4 uv4;
bool ub;
bool uba;
bvec4 ub41, ub42;
in float uf;
flat in int ui;

out float of1;
out vec4  of4;

bool foo() { ++of1; return of1 > 10.0; }

void main()
{
    of1 = 0.0;
    of4 = vec4(0.0);

    if (ub || ui > 2)  // not worth short circuiting
        ++of1;

    if (ub && !uba)  // not worth short circuiting
        ++of1;

    if (ub || foo())   // must short circuit
        ++of1;

    if (ub && foo())   // must short circuit
        ++of1;

    if (foo() || ub)   // not worth short circuiting
        ++of1;

    if (foo() && ub)   // not worth short circuiting
        ++of1;

    if (ub || ++of1 > 1.0)   // must short circuit
        ++of4;

    if (++of1 > 1.0 || ub)   // not worth short circuiting
        ++of4;

    if (ub || sin(uf) * 4.0 > of1)  // worth short circuiting
        ++of1;

    if (ub && sin(uf) * 4.0 > of1)  // worth short circuiting
        ++of1;
}