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