blob: af431c4534c5e42b2c4159c9e47432549679f93b [file] [log] [blame]
uniform half4 colorGreen, colorRed;
bool return_in_one_case(int x) {
int val = 0;
switch (x) {
case 1:
++val;
return false;
++val; // unreachable
default: ++val;
}
// reachable
return val == 1;
}
bool return_in_default(int x) {
int val = 0;
switch (x) {
default: return true;
}
// unreachable
++val;
return val == 1;
}
bool return_in_every_case(int x) {
int val = 0;
switch (x) {
case 1: return false;
default: return true;
}
// unreachable
++val;
return val == 1;
}
bool return_in_every_case_no_default(int x) {
int val = 0;
switch (x) {
case 1: return false;
case 2: return true;
}
// reachable
++val;
return val == 1;
}
bool case_has_break_before_return(int x) {
int val = 0;
switch (x) {
case 1:
break;
return false; // unreachable
case 2: return true;
default: return true;
}
// reachable
++val;
return val == 1;
}
bool case_has_break_after_return(int x) {
int val = 0;
switch (x) {
case 1:
return false;
break; // unreachable
case 2: return true;
default: return true;
}
// unreachable
++val;
return val == 1;
}
bool no_return_in_default(int x) {
int val = 0;
switch (x) {
case 1: return false;
case 2: return true;
default: break;
}
// reachable
++val;
return val == 1;
}
bool empty_default(int x) {
int val = 0;
switch (x) {
case 1: return false;
case 2: return true;
default:
}
// reachable
++val;
return val == 1;
}
bool return_with_fallthrough(int x) {
int val = 0;
switch (x) {
case 1:
case 2: return true;
default: return false;
}
// unreachable
++val;
return val == 1;
}
bool fallthrough_ends_in_break(int x) {
int val = 0;
switch (x) {
case 1:
case 2: break;
default: return false;
}
// reachable
++val;
return val == 1;
}
bool fallthrough_to_default_with_break(int x) {
int val = 0;
switch (x) {
case 1:
case 2:
default: break;
}
// reachable
++val;
return val == 1;
}
bool fallthrough_to_default_with_return(int x) {
int val = 0;
switch (x) {
case 1:
case 2:
default: return true;
}
// unreachable
++val;
return val == 1;
}
bool fallthrough_with_loop_break(int x) {
int val = 0;
switch (x) {
case 1: for (int i = 0; i < 5; ++i) {
++val;
break; // break only applies to loop, should fallthrough
}
case 2:
default: return true;
}
// unreachable
++val;
return val == 1;
}
bool fallthrough_with_loop_continue(int x) {
int val = 0;
switch (x) {
case 1: for (int i = 0; i < 5; ++i) {
++val;
continue; // continue only applies to loop, should fallthrough
}
case 2:
default: return true;
}
// unreachable
++val;
return val == 1;
}
half4 main(float2 coords) {
int x = int(colorGreen.g);
return (return_in_one_case(x) &&
return_in_default(x) &&
return_in_every_case(x) &&
return_in_every_case_no_default(x) &&
case_has_break_before_return(x) &&
case_has_break_after_return(x) &&
no_return_in_default(x) &&
empty_default(x) &&
return_with_fallthrough(x) &&
fallthrough_ends_in_break(x) &&
fallthrough_to_default_with_break(x) &&
fallthrough_to_default_with_return(x) &&
fallthrough_with_loop_break(x) &&
fallthrough_with_loop_continue(x)) ? colorGreen : colorRed;
}