<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/128587>128587</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: malloc + memcpy + free => realloc
</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>
https://godbolt.org/z/YWxW7h8sP
```c++
#include <cstdlib>
#include <cstring>
#include <memory>
extern "C" {
auto src1(void* p1, size_t old_len, size_t new_len) -> void* {
void* p2 = malloc(new_len);
memcpy(p2, p1, old_len);
free(p1);
return p2;
}
auto tgt1(void* p1, size_t old_len, size_t new_len) -> void* {
return realloc(p1, new_len);
}
}
```
alive proof: https://alive2.llvm.org/ce/z/RwPKVk
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysU0lv4zwM_TX0RUggU16Ugw_u4kvxAcV3mGJOhRfG0VS2DElOm_z6gZekTdHjAAQskHx8euZT6Zxqe6IM4juIH4Jy9Adjs6eOyjfVB5VpTtnB-8GByAELwKI1TWW03xrbAhZnwOL3y8dLepDuGXg-RcKXqAHvpuA5oFB9rceGGIj72vlGqwrE408lq_r2p1JHnbGntcJz-vBkewaI94DIIJ14ytEb5mwdAsqjUQ1gzoYQ8J45daZXz4xuXjX1XzI9vS-ZHduAeGQX2DKQMXbNDMhAPLCu1NrUgPITCeLS21FXDydAOeDEsXBfSb807i3R1BbeZC350fZswCUF6cMidtblW__vdK1Mli5qlnHfNV1vsB4uq12vpdWR2GCN2YPI2a1P5iJutT52q1dqWg3z__vz06-3oMlEsxO7MqAsTCMeiTgVPDhkaZxQKuPdXohI7GPJZVLKMA7rKpUcwyRQGXKMOWKEiBjybYJxzBOJZSiINw1BxKkrlb6yB8q5kbIQZSzTQJcVaTdbHrFTzlGzMYNXnTqXXpkeEKe3YLMJvqnG1kHEtXLefQ70ymvK_pvB7AYs8tUjDPBudcR8nHY-WWhax_rjg9Hq7-9L-cNYbWvTARYT3frZDNb8odoDFrMYB1iseo4Z_g0AAP__9KIgUQ">