blob: e70048aa5b12772d5aced8cd9e7287c9b75339ad [file] [log] [blame]
// GLSL ES 1.0 does not allow *any* operators other than subscripting to be used with arrays,
// or with structs containing arrays. SkSL (and later versions of GLSL) allow assignment and
// equality for those types. This file tests operators that would be legal, but should be flagged
// as errors. A related consequence (also tested here) is that functions can not return arrays,
// or structs containing arrays.
// Expect 17 errors
struct S { int x[1]; }; // For "simple" case
struct T { S s; }; // For trickier, nested case
S s1, s2;
T t1, t2;
int a1[1]; int a2[1];
void assign_A() { a1 = a2; }
void assign_S() { s1 = s2; }
void assign_T() { t1 = t2; }
// Note: No way to even write return_A()
S return_S() { return s1; }
T return_T() { return t1; }
bool equals_A() { return a1 == a2; }
bool equals_S() { return s1 == s2; }
bool equals_T() { return t1 == t2; }
bool notequals_A() { return a1 != a2; }
bool notequals_S() { return s1 != s2; }
bool notequals_T() { return t1 != t2; }
void sequence_A() { a1, a2; }
void sequence_S() { s1, s2; }
void sequence_T() { t1, t2; }
int ternary_A(bool b) { return (b ? a1 : a2) [0]; }
int ternary_S(bool b) { return (b ? s1 : s2) .x[0]; }
int ternary_T(bool b) { return (b ? t1 : t2).s.x[0]; }
/*%%*
operator '=' can not operate on arrays (or structs containing arrays)
operator '=' can not operate on arrays (or structs containing arrays)
operator '=' can not operate on arrays (or structs containing arrays)
functions may not return structs containing arrays
functions may not return structs containing arrays
operator '==' can not operate on arrays (or structs containing arrays)
operator '==' can not operate on arrays (or structs containing arrays)
operator '==' can not operate on arrays (or structs containing arrays)
operator '!=' can not operate on arrays (or structs containing arrays)
operator '!=' can not operate on arrays (or structs containing arrays)
operator '!=' can not operate on arrays (or structs containing arrays)
operator ',' can not operate on arrays (or structs containing arrays)
operator ',' can not operate on arrays (or structs containing arrays)
operator ',' can not operate on arrays (or structs containing arrays)
ternary operator result may not be an array (or struct containing an array)
ternary operator result may not be an array (or struct containing an array)
ternary operator result may not be an array (or struct containing an array)
*%%*/