| uniform half4 colorRed, colorGreen; |
| |
| struct S { |
| int a, b, c; |
| }; |
| |
| int numSideEffects = 0; |
| |
| noinline int side_effecting(int value) { |
| numSideEffects++; |
| return value; |
| } |
| |
| bool test() { |
| // Structs with elements that have side-effects are not eligible for optimization. |
| int val1 = 2; |
| int val2 = 1; |
| |
| int noFlatten0 = S(--val1, side_effecting(2), 3).a; |
| int noFlatten1 = S(side_effecting(1), 2, 3).b; |
| int noFlatten2 = S(1, val2 += 1, 3).c; |
| |
| return (noFlatten0 == 1) && (noFlatten1 == 2) && (noFlatten2 == 3) && |
| (val1 == 1) && (val2 == 2) && (numSideEffects == 2); |
| } |
| |
| half4 main(float2 coords) { |
| return test() ? colorGreen : colorRed; |
| } |