#version 130

uniform int c;
uniform usampler2D us2D;

in ivec2 x;
in vec2 v2a;
in float c1D;
in vec2  c2D;
in vec3  c3D;
smooth vec4  c4D;  // ??

uniform vec4 v4;

void main()
{
    float f = 3;
    switch (c) {     // full switch testing in switch.frag
    case 1:
        f = sin(f);
        break;
    case 2:
        f = f * f;
    default:
        f = 3.0;
    }

    uint i;
    i = texture(us2D, x).w;          // full uint testing in uint.frag
    i << 3u | 0x8Au >> 1u & 0xFFu;

    vec3 modfOut, modfIn;
    vec3 v11 = modf(modfIn, modfOut);
    float t = trunc(f);
    vec2 v12 = round(v2a);
    vec2 v13 = roundEven(v2a);
    bvec2 b10 = isnan(v2a);
    bvec4 b11 = isinf(v4);

    sinh(c1D) +
    cosh(c1D) * tanh(c2D);
    asinh(c4D) + acosh(c4D);
    atanh(c3D);

    int id = gl_VertexID;
    gl_ClipDistance[1] = 0.3;
}

// version 140 features

//uniform isamplerBuffer sbuf;

//layout(std140) uniform blockName {
//    int anonMem;
//};

void foo88()
{
    int id = gl_InstanceID;    // ERROR
    //id += anonMem;
    id += texelFetch(id, 8);

    gl_ClipVertex;         // these are all present...
    gl_Color;
    gl_LightSource[0];
    gl_DepthRange.far;
    gl_TexCoord;
    gl_FogFragCoord;
    gl_FrontColor;
}

// token pasting

#define mac abc##def
int mac;

#define macr(A,B) A##B
int macr(qrs,tuv);
