#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];
}