#version 450

int nonuniformEXT;

#extension GL_EXT_nonuniform_qualifier : enable

nonuniformEXT in vec4 nu_inv4;
nonuniformEXT float nu_gf;

nonuniformEXT out vec4 nu_outv4;           // ERROR, out
nonuniformEXT uniform vec4 nu_uv4;         // ERROR, uniform
nonuniformEXT const float nu_constf = 1.0; // ERROR, const

nonuniformEXT int foo(nonuniformEXT int nupi, nonuniformEXT out int f)
{
    return nupi;
}

void main()
{
    nonuniformEXT int nu_li;
    nonuniformEXT const int nu_ci = 2; // ERROR, const

    foo(nu_li, nu_li);

    int a;
    nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2);
    nu_li = nonuniformEXT(a, a);       // ERROR, too many arguments
    nu_li = nonuniformEXT();           // ERROR, no arguments
}

layout(location=1) in struct S { float a; nonuniformEXT float b; } ins;  // ERROR, not on member
layout(location=3) in inbName { float a; nonuniformEXT float b; } inb;   // ERROR, not on member
