// 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]; }