<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63142>63142</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
malloc&co. are not noalias w.r.t errno
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
amonakov
</td>
</tr>
</table>
<pre>
Consider
```c
#include <stdlib.h>
#include <errno.h>
int f(long sz, void **out)
{
int e = errno;
*out = malloc(sz);
return errno - e;
}
```
Starting from llvm-12 this unconditionally returns zero, but POSIX is clear that malloc may set errno on failure, and this is observable to the caller.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxsUk1v3CAQ_TXjyygWHtbO-uDDJtuVemqlXHoFM2vTYogAb7T59ZU_0i9VQsDozXu8GUalZAfP3EH9BPW5UHMeQ-zUFLz6EW6FDubePQefrOEI4gziBI3YVr_HJK3v3WwYQT6nbJzV5Qjy0_9gjtGHP9F1tz7jFejogh8wvQM94y1Yg0AnoFOYM1C75z8-bRdcOIvkGVdNkB8AIm6kFZyUc6EHOi6y7V9ZkfMc_UbHB-RfIDye_yl1C1-yitn6Aa8xTOjcbXqoCPNoE86-D97YbINXzt137YTvHMNSjp4zfv3y8vkb2oS9YxUxjyrv9nBSd0ycdy_B41VZN0deqMqb7Q2bMOjE8aa0Y8wB88jYK-c4loXppGllqwruqubYiJpIUjF2V6GVrK-6P1ItpDrUR21aqZu2ElLqVhe2I0FSNKKpqlpIKquDZNNKemzNQRgl4SB4UtaVS8FliENhU5q5a2R1oMIpzS6t40Pk-Q1XEIiWaYrd2iQ9DwkOwtmU02-VbLPj7uN_mj6UqCKjDxl9UM6qhG9lLPemFHN03ZjzawJ5AroAXQabx1mXfZiALovsfjy8xvCd-wx0Wc0koMtq9mcAAAD__9WJ5kU">