36 lines
801 B
Plaintext
36 lines
801 B
Plaintext
|
|
uniform half4 colorRed, colorGreen;
|
||
|
|
|
||
|
|
struct S {
|
||
|
|
int a, b, c;
|
||
|
|
};
|
||
|
|
|
||
|
|
void check_array_1(int[1]) {}
|
||
|
|
void check_array_2(int[2]) {}
|
||
|
|
void check_array_3(int[3]) {}
|
||
|
|
|
||
|
|
bool test() {
|
||
|
|
const S x = S(1, 2, 3);
|
||
|
|
const S xx = S(1, 2, 3);
|
||
|
|
const S y = S(1, 2, 4);
|
||
|
|
|
||
|
|
int a[x.a];
|
||
|
|
int b[x.b];
|
||
|
|
int c[x.c];
|
||
|
|
check_array_1(a);
|
||
|
|
check_array_2(b);
|
||
|
|
check_array_3(c);
|
||
|
|
|
||
|
|
// Structs with elements lacking side-effects can be optimized.
|
||
|
|
int two = 2;
|
||
|
|
int flatten0 = S(x.a, two, 3).a;
|
||
|
|
int flatten1 = S(x.a, two, 3).b;
|
||
|
|
int flatten2 = S(x.a, two, 3).c;
|
||
|
|
|
||
|
|
return (x == xx) && !(x != xx) && (x != y) && !(x == y) && (x.a == y.a) &&
|
||
|
|
(flatten0 == x.a) && (flatten1 == x.b) && (flatten2 == x.c);
|
||
|
|
}
|
||
|
|
|
||
|
|
half4 main(float2 coords) {
|
||
|
|
return test() ? colorGreen : colorRed;
|
||
|
|
}
|