1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorRed, colorGreen; 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workerstruct S { 4*c8dee2aaSAndroid Build Coastguard Worker int a, b, c; 5*c8dee2aaSAndroid Build Coastguard Worker}; 6*c8dee2aaSAndroid Build Coastguard Worker 7*c8dee2aaSAndroid Build Coastguard Workerint numSideEffects = 0; 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Workernoinline int side_effecting(int value) { 10*c8dee2aaSAndroid Build Coastguard Worker numSideEffects++; 11*c8dee2aaSAndroid Build Coastguard Worker return value; 12*c8dee2aaSAndroid Build Coastguard Worker} 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Workerbool test() { 15*c8dee2aaSAndroid Build Coastguard Worker // Structs with elements that have side-effects are not eligible for optimization. 16*c8dee2aaSAndroid Build Coastguard Worker int val1 = 2; 17*c8dee2aaSAndroid Build Coastguard Worker int val2 = 1; 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker int noFlatten0 = S(--val1, side_effecting(2), 3).a; 20*c8dee2aaSAndroid Build Coastguard Worker int noFlatten1 = S(side_effecting(1), 2, 3).b; 21*c8dee2aaSAndroid Build Coastguard Worker int noFlatten2 = S(1, val2 += 1, 3).c; 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker return (noFlatten0 == 1) && (noFlatten1 == 2) && (noFlatten2 == 3) && 24*c8dee2aaSAndroid Build Coastguard Worker (val1 == 1) && (val2 == 2) && (numSideEffects == 2); 25*c8dee2aaSAndroid Build Coastguard Worker} 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 28*c8dee2aaSAndroid Build Coastguard Worker return test() ? colorGreen : colorRed; 29*c8dee2aaSAndroid Build Coastguard Worker} 30