#version 100

varying vec3 color;       // ERRROR, there is no default qualifier for float

lowp vec2 foo(mediump vec3 mv3)
{
    highp vec4 hv4;
    return hv4.xy;
}

int global_medium;

uniform lowp sampler2D samplerLow;
uniform mediump sampler2D samplerMed;
uniform highp sampler2D samplerHigh;

precision highp int; 
precision highp ivec2;     // ERROR
precision mediump int[2];  // ERROR
vec4 uint;                 // okay
precision mediump vec4;    // ERROR

int global_high;

void main()
{
    lowp int sum = global_medium + global_high;

    gl_FragColor = vec4(color, 1.0);

    int level1_high;
    sum += level1_high;

    precision lowp int;
    int level1_low;
    sum += level1_low;
    
    // test maxing precisions of args to get precision of builtin
    lowp float arg1;
    mediump float arg2;
    lowp float d = distance(arg1, arg2);

    {
        int level2_low;
        sum += level2_low;
        
        precision highp int;
        int level2_high;
        sum += level2_high;
        do {
            if (true) {
                precision mediump int;
                int level4_medium;
                sum += level4_medium;
            }
            int level3_high;
            sum += level3_high;
        } while (true);	
        int level2_high2;
        sum += level2_high2;
    }
    int level1_low3;
    sum += level1_low3;

    sum += 4 + ((ivec2(level1_low3) * ivec2(level1_high) + ivec2((/* comma operator */level1_low3, level1_high)))).x;
    
    texture2D(samplerLow, vec2(0.1, 0.2));
    texture2D(samplerMed, vec2(0.1, 0.2));
    texture2D(samplerHigh, vec2(0.1, 0.2));
}

precision mediump bool;                 // ERROR
//precision mediump struct { int a; } s;  // ERROR
struct s {int a;};
precision mediump s;                    // ERROR
mediump bvec2 b2;                       // ERROR
