1uniform half4 colorGreen, colorRed; 2 3bool return_in_one_case(int x) { 4 int val = 0; 5 switch (x) { 6 case 1: 7 ++val; 8 return false; 9 ++val; // unreachable 10 default: ++val; 11 } 12 13 // reachable 14 return val == 1; 15} 16 17bool return_in_default(int x) { 18 int val = 0; 19 switch (x) { 20 default: return true; 21 } 22 23 // unreachable 24 ++val; 25 return val == 1; 26} 27 28bool return_in_every_case(int x) { 29 int val = 0; 30 switch (x) { 31 case 1: return false; 32 default: return true; 33 } 34 35 // unreachable 36 ++val; 37 return val == 1; 38} 39 40bool return_in_every_case_no_default(int x) { 41 int val = 0; 42 switch (x) { 43 case 1: return false; 44 case 2: return true; 45 } 46 47 // reachable 48 ++val; 49 return val == 1; 50} 51 52bool case_has_break_before_return(int x) { 53 int val = 0; 54 switch (x) { 55 case 1: 56 break; 57 return false; // unreachable 58 case 2: return true; 59 default: return true; 60 } 61 62 // reachable 63 ++val; 64 return val == 1; 65} 66 67bool case_has_break_after_return(int x) { 68 int val = 0; 69 switch (x) { 70 case 1: 71 return false; 72 break; // unreachable 73 case 2: return true; 74 default: return true; 75 } 76 77 // unreachable 78 ++val; 79 return val == 1; 80} 81 82bool no_return_in_default(int x) { 83 int val = 0; 84 switch (x) { 85 case 1: return false; 86 case 2: return true; 87 default: break; 88 } 89 90 // reachable 91 ++val; 92 return val == 1; 93} 94 95bool empty_default(int x) { 96 int val = 0; 97 switch (x) { 98 case 1: return false; 99 case 2: return true; 100 default: 101 } 102 103 // reachable 104 ++val; 105 return val == 1; 106} 107 108bool return_with_fallthrough(int x) { 109 int val = 0; 110 switch (x) { 111 case 1: 112 case 2: return true; 113 default: return false; 114 } 115 116 // unreachable 117 ++val; 118 return val == 1; 119} 120 121bool fallthrough_ends_in_break(int x) { 122 int val = 0; 123 switch (x) { 124 case 1: 125 case 2: break; 126 default: return false; 127 } 128 129 // reachable 130 ++val; 131 return val == 1; 132} 133 134bool fallthrough_to_default_with_break(int x) { 135 int val = 0; 136 switch (x) { 137 case 1: 138 case 2: 139 default: break; 140 } 141 142 // reachable 143 ++val; 144 return val == 1; 145} 146 147bool fallthrough_to_default_with_return(int x) { 148 int val = 0; 149 switch (x) { 150 case 1: 151 case 2: 152 default: return true; 153 } 154 155 // unreachable 156 ++val; 157 return val == 1; 158} 159 160bool fallthrough_with_loop_break(int x) { 161 int val = 0; 162 switch (x) { 163 case 1: for (int i = 0; i < 5; ++i) { 164 ++val; 165 break; // break only applies to loop, should fallthrough 166 } 167 case 2: 168 default: return true; 169 } 170 171 // unreachable 172 ++val; 173 return val == 1; 174} 175 176bool fallthrough_with_loop_continue(int x) { 177 int val = 0; 178 switch (x) { 179 case 1: for (int i = 0; i < 5; ++i) { 180 ++val; 181 continue; // continue only applies to loop, should fallthrough 182 } 183 case 2: 184 default: return true; 185 } 186 187 // unreachable 188 ++val; 189 return val == 1; 190} 191 192half4 main(float2 coords) { 193 int x = int(colorGreen.g); 194 return (return_in_one_case(x) && 195 return_in_default(x) && 196 return_in_every_case(x) && 197 return_in_every_case_no_default(x) && 198 case_has_break_before_return(x) && 199 case_has_break_after_return(x) && 200 no_return_in_default(x) && 201 empty_default(x) && 202 return_with_fallthrough(x) && 203 fallthrough_ends_in_break(x) && 204 fallthrough_to_default_with_break(x) && 205 fallthrough_to_default_with_return(x) && 206 fallthrough_with_loop_break(x) && 207 fallthrough_with_loop_continue(x)) ? colorGreen : colorRed; 208} 209