<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/58743>58743</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            instcombine: malloc assumed to never return 0
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          wolfy1961
      </td>
    </tr>
</table>

<pre>
    The instcombine pass assumes that malloc always returns non-null pointers. Given 
```
define dso_local i32 @main() local_unnamed_addr {
entry:
  %call = call ptr @malloc(i64 noundef 9223372036854775807)
  %cmp = icmp eq ptr %call, null
  %conv = zext i1 %cmp to i32
  call void @foo(i32 noundef %conv)
  ret i32 0
}

declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #0
declare void @foo(i32 noundef) local_unnamed_addr

attributes #0 = { allockind("alloc,uninitialized") allocsize(0) }
```
use opt -instcombine < test.ll

and we get

```
define dso_local i32 @main() local_unnamed_addr {
entry:
  call void @foo(i32 noundef 0)
  ret i32 0
}
```
The above code was derived from the following C source:
```
typedef unsigned long size_t;
void *malloc(size_t);
void foo(int);

int main() {
  void *p = malloc(((size_t)-1)>>1);
  foo(p == (void *)0);
  return 0;
}
```
This may be related to [issue 54002](https://github.com/llvm/llvm-project/issues/54002).

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1VMGS4yYQ_Rrp0jUuBJIlH3SYHWf3B3KfQqZlk2BwANnxfn1aSNbKqZ3drUqlCstAN69fP7rpnLq3v58QtA3x4M6dtggXGQLQbzhjgHiSEc7SGHcAaW7yHsBjHLwNYJ19sYMxcHHaRvRhA1_0FS1kbJ-x12zL5pGWCvsRXAX3TljSgBYcspKdpbYZbzK-g7T_Plgrz6jepVIesvrTdBxt9PdMvE4rgIxX5GwgE3tIk0v0E9xIlQD1tiSGg6W4sONciJozsW2qsq6rhtUUbw11viQkPU7wrwlsipDxNxizXHs7e03uX_HvCLp4IEQ3JvVwTKyuTquRVu_cyIlSfnCacVY8SNckyixYVu_nyazfwUiPdF4aLcOC84O8P9KUC_aM-SHL7yOsackYve6GSKUy4iZZ6NIg0flTW5Xuls_s3garrY6aUviKZOJjgGQLtEGubNz4lvlzCQ0BwV0ivKyrNRNvQNHj5nFFMy-r4IZwxLje_X9r8ic3zn7lrp8Jjq0pO3dFODiFcKN7V-ipyRT03p2pOxF6R_rdtD3CGwQ3-AMulP6FFu8XHIkMNuijJQzj6NSo_HvMxJzUxJ-_LgU124n7k8ucn32yTF_ahJWEi14AD_Cp25YQ01gCvRQJ8zcaxRod5qDpdCo03jwQyY89-07PFCm8kPtQZB2Iyx06pENGRlKGWjmrPml6BBGqkjGeVXuKdorxEkZ5-WcaRx1PQ7ehSqSFMdfH38vFuz_wQKl8TgiBJhMI322mmDm2xXZb06skCparVqid2Mk86miwXZU3xVpe3_QiJ2oWr-iXBPPBm_Y_MGvqUuSntpfyIBirFFOlEIe6l0w1ZV8yWbJGVX1uZIcmtKQLNa7FGySIsYmrfa5bzjgvClbQp2K7jRTY16phzVbJLXY9tQRSUZjNyGPj_DH3baLUDcdARqNDDN-MlO1Yo5jCEb4c4sn59uZMfy922yJPwdtE_h-w7gQX">