// Expect 5 errors

// Correct declaration (used in some test functions)
uniform shader s1;
uniform shader s2;

// Incorrect shader declarations (they must be uniform)
// TODO(skbug.com/11374): These are not detected as errors yet
shader s3;
in shader s4;

// Various places that shaders should not be allowed:
half4  local()             { shader s; return sample(s); }
half4  parameter(shader s) { return sample(s); }
shader returned()          { return s1; }
half4  constructed()       { return sample(shader(s1)); }
half4  expression(bool b)  { return sample(b ? s1 : s2); }
