void main() { bool expr1 = sk_FragCoord.x > 0; bool expr2 = sk_FragCoord.y > 0; if (true && expr1) { // -> if (expr1) sk_FragColor.r = 1; } else if (false && expr1) { // -> if (false) -> block removed sk_FragColor.r = -2; } else if (true ^^ expr1) { // -> if (!expr1) sk_FragColor.r = 3; } else if (false ^^ expr2) { // -> if (expr2) sk_FragColor.r = 4; } else if (false || expr2) { // -> if (expr2) sk_FragColor.r = 5; } else if (true || expr2) { // -> if (true) -> replaces unreachable else sk_FragColor.r = 6; } else { // removed sk_FragColor.r = -7; } // Test short-circuiting of right hand side boolean literals if (expr1 && true) { // -> if (expr1) sk_FragColor.r = 1; } else if (expr1 && false) { // -> if (false) -> block removed sk_FragColor.r = -2; } else if (expr1 ^^ true) { // -> if (!expr1) sk_FragColor.r = 3; } else if (expr2 ^^ false) { // -> if (expr2) sk_FragColor.r = 4; } else if (expr2 || false) { // -> if (expr2) sk_FragColor.r = 5; } else if (expr2 || true) { // -> if (true) -> replaces unreachable else sk_FragColor.r = 6; } else { // removed sk_FragColor.r = -7; } }