blob: 5cd71c87b2c6094ecf8d6e5baa698a04fabac236 [file] [log] [blame]
// Expect >= 8 errors (currently 12, due to double-reporting)
// Correct declaration (used in some test functions)
uniform shader s1;
uniform shader s2;
uniform float2 xy;
// Incorrect shader declarations (they must be uniform)
shader s3;
in shader s4;
// Incorrect shader declarations (no opaque types in structs or arrays)
struct S { shader sh; };
uniform S s5;
uniform shader s6[2];
// Various places that shaders should not be allowed:
bool equality() { return s1 == s2; }
bool comparison() { return s1 < s2; }
bool unary_not() { return !s1; }
void unary_neg() { -s1; }
void unary_pos() { +s1; }
void arithmetic() { s1 * s2; }
void index() { s1[0]; }
void swizzle() { s1.xyz; }
void assignment() { s1 = s2; }
half4 local() { shader s; return s.eval(xy); }
half4 parameter(shader s) { return s.eval(xy); }
shader returned() { return s1; }
half4 constructed() { return shader(s1).eval(xy); }
half4 expression(bool b) { return (b ? s1 : s2).eval(xy); }
half4 dangling_eval() { s1.eval; }
/*%%*
variables of type 'shader' must be uniform
'in' variables not permitted in runtime effects
variables of type 'shader' must be uniform
opaque type 'shader' is not permitted in a struct
variables of type 'S' may not be uniform
opaque type 'shader' may not be used in an array
type mismatch: '==' cannot operate on 'shader', 'shader'
type mismatch: '<' cannot operate on 'shader', 'shader'
'!' cannot operate on 'shader'
'-' cannot operate on 'shader'
'+' cannot operate on 'shader'
type mismatch: '*' cannot operate on 'shader', 'shader'
expected array, but found 'shader'
type 'shader' has no method named 'xyz'
cannot modify immutable variable 's1'
variables of type 'shader' must be global
variables of type 'shader' must be uniform
parameters of type 'shader' not allowed
unknown identifier 's'
functions may not return opaque type 'shader'
cannot construct 'shader'
ternary expression of opaque type 'shader' not allowed
expected '(' to begin method call
function 'dangling_eval' can exit without returning a value
*%%*/