#version 420 core

#extension GL_ARB_separate_shader_objects : enable

layout(vertices = 4) out;

out gl_PerVertex {
    vec4 gl_Position;
} gl_out[3];                 // ERROR, wrong size

out int a[gl_out.length()];
out int outb[5];             // ERROR, wrong size
out int outc[];

void main()
{
    vec4 p = gl_in[1].gl_Position;
    float ps = gl_in[1].gl_PointSize;
    float cd = gl_in[1].gl_ClipDistance[2];

    int pvi = gl_PatchVerticesIn;
    int pid = gl_PrimitiveID;
    int iid = gl_InvocationID;

    gl_out[gl_InvocationID].gl_Position = p;
    gl_out[gl_InvocationID].gl_PointSize = ps;        // ERROR
}

out float outf;  // ERROR, no array

layout (location = 0) in dmat2x4 vs_tcs_first[];
layout (location = 12) in dmat2x4 vs_tcs_last[];

void foo()
{
 if ((dmat2x4(dvec4(-0.625, -0.5, -0.375lf, -0.25), dvec4(-0.375, -0.25, -0.125, 0)) != vs_tcs_first[0]) ||
        (dmat2x4(dvec4(0.375, 0.5, 0.625, 0.75), dvec4(0.625, 0.75, 0.875, -0.625)) != vs_tcs_last[0]))
    {
        ;
    }
}

layout(vertices = 0) out;  // ERROR, can't be 0
