flat                float _flat;
noperspective       float _noperspective;
in                  float _in;
out                 float _out;
threadgroup         float _threadgroup;
$es3                float _es3;
$pure               float _pure;
inline              float _inline;
noinline            float _noinline;
readonly            float _readonly;
writeonly           float _writeonly;

flat                void flat_fn() {}
noperspective       void noperspective_fn() {}
in                  void in_fn() {}
out                 void out_fn() {}
threadgroup         void threadgroup_fn() {}
$es3                void es3_fn() {}
$pure               void sk_pure_fn() {}
readonly            void readonly_fn() {}
writeonly           void writeonly_fn() {}
buffer              void buffer_fn() {}

float4 main(float2 xy) {
    return float4(1);
}

/*%%*
'flat' is not permitted here
'noperspective' is not permitted here
'in' is not permitted here
'out' is not permitted here
'threadgroup' is not permitted here
'$es3' is not permitted here
'$pure' is not permitted here
'inline' is not permitted here
'noinline' is not permitted here
type 'float' does not support qualifier 'readonly'
type 'float' does not support qualifier 'writeonly'
'flat' is not permitted here
'noperspective' is not permitted here
'in' is not permitted here
'out' is not permitted here
'threadgroup' is not permitted here
'$es3' is not permitted here
'$pure' is not permitted here
type 'void' does not support qualifier 'readonly'
type 'void' does not support qualifier 'writeonly'
'buffer' is not permitted here
*%%*/
