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