<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/126440>126440</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Failure to infer alignment of `malloc`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Kmeakin
</td>
</tr>
</table>
<pre>
According to cppreference, `malloc` should always return pointers that are at least as aligned as `max_align_t`. So the alignment test should always be true. gcc optimises this but LLVM does not:
https://godbolt.org/z/GnbEfbseE
https://alive2.llvm.org/ce/z/QZign2
```c
bool src(void) {
void* p = malloc(1);
return ((uintptr_t)p % alignof(max_align_t)) == 0;
}
bool tgt(void) { return true; }
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJxkUsFu2zoQ_JrVZRGDWlq2dNDBeY7e4eUdigI99BJQ1EpmS4kCuXKbfH0h22mTFCAgiZidmR2NSckNE3MNxT0Ux8wscgqx_m9k891NWRu65_pgbYidmwaUgHaeI_ccebIM9A_CTo3G-2BhpzCdwuI7NP6HeU4YWZY44RzcJBwTyskImshoBD2bJGgSGr_qd-vrhern0-XmSWCnNvg5oJz4Chp5EhRO8kGmZZS48AYHazHM4kaXeFVzCdtF8PHxy__YBU44BQF9ALWek8ic1i9qgJohdG3wsglxAGpegJp_p_ahbxM__IU13p2ZNt6fxxt-TeIy9OmrGyZaBXbqeiyoQxuCxxQtUHkOrgOqEPb3oA6IiNebA84I-oi3KKnMgSrQr6BbkkAlULm4SWaJTwJUzQhUXOMJPVD5Nj-qLkr6uBKrKxnsj9f1L55kkPeeXoXWPEHf4w3-ukzW1bqrdGUyrvO9rnK9p6rKTnXf622ec7UlWxZl2-dV0RYtUcGW86LcZa4mRYUiVVG-zXW1UWVR9bottSa72ysNW8Wjcf53rJlLaeE6p912qzJvWvbpUlKi0aXE3d31V78YcWECorW9sV7H79plSLBV3iVJfwjFiee6Mc4vkdcqu6nn-KZboX_X5myJvv5QEyenpd3YMAI1K_HtcTfH8I2tADUX2wmouTk_1_QrAAD__8_zEBk">