#version 100

int ga, gb;
float f;

uniform sampler2D fsa[3];
uniform float fua[10];
attribute mat3 am3;
attribute vec2 av2;
varying vec4 va[4];

const mat2 m2 = mat2(1.0);
const vec3 v3 = vec3(2.0);

void foo(inout float a) {}

int bar()
{
    return 1;
}

void main()
{
    while (ga < gb) { }

    do { } while (false);

    for (           ;              ;         );           // ERROR
    for (           ;        ga==gb;         );           // ERROR
    for (           ;              ;      f++);           // ERROR
    for (     ga = 0;              ;         );           // ERROR
    for ( bool a = false;          ;         );           // ERROR
    for (float a = 0.0; a == sin(f);         );           // ERROR
    for (  int a = 0;       a  < 10;   a *= 2);           // ERROR
    for (  int a = 0;       a <= 20;      a++)  --a;      // ERROR
    for (  int a = 0;       a <= 20;      a++)  { if (ga==0) a = 4; } // ERROR
    for (float a = 0.0;   a <= 20.0; a += 2.0);
    for (float a = 0.0;   a != 20.0; a -= 2.0)  { if (ga==0) ga = 4; }
    for (float a = 0.0;   a == 20.0;      a--) for (float a = 0.0;   a == 20.0;      a--);  // two different 'a's, everything okay
    for (float a = 0.0;   a <= 20.0; a += 2.0);
    for (float a = 0.0;   a <= 20.0; a += 2.0);
    for (float a = 0.0;   a > 2.0 * 20.0; a += v3.y);
    for (float a = 0.0;   a >= 20.0; a += 2.0) foo(a);    // ERROR

    int ia[9];

    fsa[ga];  // ERROR
    fua[ga];
    am3[ga];  // ERROR
    av2[ga];  // ERROR
    va[2+ga]; // ERROR
    m2[ga];   // ERROR
    v3[ga/2]; // ERROR
    ia[ga];   // ERROR

    for (int a = 3; a >= 0; a--) {
        fsa[a];
        fua[a+2];
        am3[3*a];
        av2[3*a];
        va[a-1];
        m2[a/2];
        v3[a];
        ia[a];
        ia[bar()];  // ERROR
    }

    fsa[2];
    fua[3];
    am3[2];
    av2[1];
    va[1];
    m2[1];
    v3[1];
    ia[3];
}
