xref: /aosp_15_r20/external/skia/resources/sksl/shared/Ossfuzz37677.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen;
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Workervoid original_fuzzer_output() {
4*c8dee2aaSAndroid Build Coastguard Worker    float y[8],z;
5*c8dee2aaSAndroid Build Coastguard Worker    z,y[3 .1L[y[7]=y[3],4]]+=0;
6*c8dee2aaSAndroid Build Coastguard Worker}
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) {
9*c8dee2aaSAndroid Build Coastguard Worker    int x[1], y=0, z=0;
10*c8dee2aaSAndroid Build Coastguard Worker
11*c8dee2aaSAndroid Build Coastguard Worker    // This line triggers two optimizations:
12*c8dee2aaSAndroid Build Coastguard Worker    // 1 - No-op arithmetic simplification removes the `+= 0` and changes the ref-kind of `x` from
13*c8dee2aaSAndroid Build Coastguard Worker    //     "write" to "read". Crucially, the ref-kind of `y` must remain "write."
14*c8dee2aaSAndroid Build Coastguard Worker    // 2 - Comma-operator simplification detects that the leftmost `0, ` has no side effect and
15*c8dee2aaSAndroid Build Coastguard Worker    //     eliminates it. This is done by returning a clone of the right-side expression. The act of
16*c8dee2aaSAndroid Build Coastguard Worker    //     cloning the right-side expression can lead to an assertion if `y` has the wrong ref-kind.
17*c8dee2aaSAndroid Build Coastguard Worker    0, x[y=z] += 0;
18*c8dee2aaSAndroid Build Coastguard Worker
19*c8dee2aaSAndroid Build Coastguard Worker    return colorGreen;
20*c8dee2aaSAndroid Build Coastguard Worker}
21