<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">