<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/91075>91075</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[HLSL] Integer conversion overload scoring
</td>
</tr>
<tr>
<th>Labels</th>
<td>
HLSL
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
llvm-beanz
</td>
</tr>
</table>
<pre>
Because of C/C++ usual arithmetic conversions, C++ overload resolution doesn't handle some cases that HLSL needs to handle for 16-bit types.
The following code is ambiguous to resolve based on currently implemented overload rules:
```hlsl
void Fn4(int64_t L);
void Fn4(int I);
void Call4(int16_t H) { Fn4(H); }
```
[A similar example is here](https://github.com/llvm/llvm-project/blob/main/clang/test/SemaHLSL/OverloadResolutionBugs.hlsl#L7)
Per HLSL rules the conversion should prefer the next smallest integer type (`int`) when promoting 16-bit values.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUU9Fq7DYQ_Zrxy5DFHlvr9YMfsgkmFwItvX2_yPKsrSJLi0bae9OvL3Y2aaBPBYMFRzM6c84cLWJnz9yDOoN6LnROS4i9c7f1YWTt_y7GML31ZzY6C2O44BPQ8AR0Bjpjlqwd6mjTsnKyBk3wN45igxegJ_y4F24cXdATRpbgcrLB4xRYPFCbcNF-cowSVkajhQXTohO-vH5_Rc88CabwcekSIlbHh9EmTG9XlgOUj1A-_rlskHPhp_UzmjAxWkG9jnbOIe8N9qdvjKMWnjB4NDlG9sm9oV2vjlf2aQM-qWbHAvXWHY7l-7c4cVA-3oKdcPAN0Mn6dGx-JHwF6qA-_wfEb5_AB_aknbuj1fFHwhegDqE934te3gsQ2uevT29ndX5Esat1OiL_0hvrbcyFI4N6BjotKV13zjQADbNNSx4PJqxAw-bo_fdwjeEvNgloGF0YgYZVWw80GKf9DDQklg38zqveTAAafrur8senf-c8y2HXg-rXduO8T_g7x3fjdvkwLfxlJ1CWkN2E18gXjjvo-VdCWbVzLAmtTzxvyNuVEegEx9L6tE1PHf5c2OM1hjWkzeT7Fty0yyyHYurrqas7XXBftVVzampVt8XSK12xLpWuL0qZi24bulTtqSVDXaeMKQvbU0lNqcqmaknV7YEmOk5VYyqluuaiDTQlr9q6w6bdIcS5sCKZ-64qW1U4PbKTPT5E72rRFqSPDOVZoCmdlST_Nkg2uT1ye4F6xm_3wb9o9bmIYkK0fi5ydP3_NninKkDDzvafAAAA__9E6ETW">