<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/76085>76085</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Switch default destination not eliminated despite known value range
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mattiase
</td>
</tr>
</table>
<pre>
A fully populated switch with known value range (but no explicit `default` clause) will still generate a conditional jump to the default destination:
```C
void canthappen(void);
int g(int);
int f(int x) {
if (x >= 0 && x <= 3) {
switch (x) {
case 0: return g(2);
case 1: return g(3);
case 2: return g(4);
case 3: return g(5);
}
canthappen();
}
return -23;
}
```
results in a never-taken conditional branch to code that calls `canthappen`.
llvm 18.0.0git (9f74e6e6157bc4d63a28385c7c0a50506bb8a737).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxsk19yqzoMxldjXjTJGJs_5oGHnJObDdwVCKOAW8cwWCTt7s84Sds07QwDY30_ic-2hDG6IRC1ovwjyn2GK4_T0p6Q2WGkrJv693YHx9X7d5inefXI1EO8OLYjXByP8BqmS4Az-pVgwTAQCGW6lSFMQG-zd9YxiEr2dMTVs6gkWI9rJKEauDjvIXJ6DxRoQSZAsFPoHbspoIeX9TQDT8Ajwb0E9BTZBUyE0Dsh90LuRCVvz9_b-jy5HiwGHnGeKQhlUkSoRug_N8IFhkEo4wI_hr_E402Et-RU1HcdwB3TFt9A6P-E3oMEoSqhKkiRvyminxLg48BS2g_NYiSQQu9gIV6XcDWlHi19UvkTpX-l1BNV_ErpJ6p8pkS9f0x5OMlv5AN2r7ZR-us0P9TP-7ktF4qr5wguAEKgMy0bxlcK3-6-WzDYMd2-nXoCHpHBovcx9dODo0pub1W9P58gN1u5lUPqOmWaY11QRVVe1p0t-kqjMtqUtrYSS1nKqusM1roWqrnXyPpW941uMKM2r6WWTZEXTTa2lZRobdHk2BemqKTNtSFtG2tQY29M5lollc6VknldKNVsS62KvDJ5Y3JZFLIUhaQTOr9NPrfTMmQuxpXaupKmzDx25ON1EpUKdIGrKJRKg7m0KWfTrUMUhfQucvyqwo49tf_feuyXIYEwMZB3p7SmPkmzY_o5utm6-HZknmOaK3UQ6jA4Htdua6eTUIf0x_tnMy_TC1kW6nD1GYU6XPfxLwAA___2JUeF">