<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/120141>120141</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang -O2 generates wrong asm instructions.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
lomes0
</td>
</tr>
</table>
<pre>
### Env
```
clang-19 --version
Ubuntu clang version 19.1.5 (++20241203083330+ab4b5a2db582-1~exp1~20241203083345.68)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-19/bin
lsb_release -a ILPO-PRD-UBN156 llvm_passes * via C v11.4.0-gcc
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
uname -a ILPO-PRD-UBN156 llvm_passes * via C v11.4.0-gcc
Linux ILPO-PRD-UBN156 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
```
### Details
O2 optimisations are yielding inccorect asm instructions.
Reporduction is simple, compile:
```bash
clang-19 -O2 -g -c -o buf.o buf.c
clang-19 -O2 -g -c -o main.o main.c
clang-19 -O2 -g -o main main.o buf.o
```
```c
// main.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "buf.h"
int
handler(void)
{
char *buf;
int len=0;
srand(time(NULL));
if (rand() & 0x1) {
build_buf (&buf, &len);
}
else {
printf("...");
}
send_buf (buf, len);
return 0;
}
int main()
{
(void) handler();
return 0;
}
```
```c
// buf.c
#include "buf.h"
void send_buf (char* buf,int len) {}
void build_buf (char** buf, int* len) { }
```
```c
// buf.h
void send_buf (char*, int);
void build_buf (char** buf, int* len);
```
The generated handler() asm skips the call to send_buf, whenever the if condition evalutes to false (ie. printf("...") is called).
See gdb for the exact asm:
```gdb
gdb main ILPO-PRD-UBN156 llvm_passes * via C v11.4.0-gcc
GNU gdb (Ubuntu 12.1-0ubuntu1~22.04.2) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from main...
(gdb) disassemble handler
Dump of assembler code for function handler:
0x0000000000001170 <+0>: sub $0x18,%rsp
0x0000000000001174 <+4>: movl $0x0,0xc(%rsp)
0x000000000000117c <+12>: xor %edi,%edi
0x000000000000117e <+14>: call 0x1050 <time@plt>
0x0000000000001183 <+19>: mov %eax,%edi
0x0000000000001185 <+21>: call 0x1040 <srand@plt>
0x000000000000118a <+26>: call 0x1060 <rand@plt>
0x000000000000118f <+31>: test $0x1,%al
0x0000000000001191 <+33>: je 0x11b7 <handler+71>
0x0000000000001193 <+35>: lea 0x10(%rsp),%rdi
0x0000000000001198 <+40>: lea 0xc(%rsp),%rsi
0x000000000000119d <+45>: call 0x11f0 <build_buf>
0x00000000000011a2 <+50>: mov 0x10(%rsp),%rdi
0x00000000000011a7 <+55>: mov 0xc(%rsp),%esi
0x00000000000011ab <+59>: call 0x11e0 <send_buf>
0x00000000000011b0 <+64>: xor %eax,%eax
0x00000000000011b2 <+66>: add $0x18,%rsp
0x00000000000011b6 <+70>: ret
0x00000000000011b7 <+71>: lea 0xe46(%rip),%rdi # 0x2004
0x00000000000011be <+78>: xor %eax,%eax
0x00000000000011c0 <+80>: call 0x1030 <printf@plt>
End of assembler dump.
(gdb)
```
Notice handler<+33> jumps to handler+<71>.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMWE9v27gT_TTMhbBAUbItH3yQ7bgokKZBmmCxp4KSxjb7o0SBpGzn0s_-w1CS_6Ry2929VDASS0M-Pr4ZzowlrJXbCmBOxgsyXt2Jxu20mStdgmV3mS7e5oRH7YfeV3vCUjJh3YeluRLVdhTO6Gi0B2OlrghLX7Omcg31Nto9puEsCIMxJTwhfEH4gjMeh5xFLImiiBG-EFmcjQUvsnHCR-F3ONbh98tB8TiYJITPCEtfhNmCI1FKj8nk6yQe1flIyao5jrZVg_adAVHQUhegcFStrTwSln6srBNKQbGSBp8Tvm6sIXytZIZ_1b4chTPC15nEfRCWKpt9NaBAWKAjQf-86-PD0-fR0_Nq9Lp4DMcTinv4WgtrwVLCU3LPScJIsqB7KeiS7sMwiAM22uY5JSx91PThywKFahRYKgxQsRdSiUxBQFi6ktYZmTVOG_pxhZK1vkUT2NzI2qHLoxSpdG7nPGBxENOHly-Epc-teN0QvLydsHSpC6hEeWH6JsryrdW9QcufqXh7_TfdHzBYf8CYBEnARvFstIUKjMwp4VE8-94KGo46fb98eqJPz_f3n55evq7-fkw_fVzSv6Cgj3pP6YSGUxKlMSdRGo7p68uS8u6QvPv34fGV8LUn8u5M4-d05FfghFSWsPQzp7p2spRWoNPbaHmToApZbams8lwbyB0VtqSyss40uR8XtJDPUGtTtM-otNTKslZA-JLmuqylwji4JJIJu7tKMJ85HW3pKKcjTbNmE7R_85tjSiGroPs3OKq19eM85IAS_W3uZVkTvj5DEh7JKldNAZRES-sKqYMdie6HTEpmwzYnSxiycI6UdoTzlomsHIbOTlSFAkN4steyaPMhmS4IOx2wfCcMxmDWbEh0aUAEBRWJVuzaYI2oCsITpEJ48vj68IDAfPZu_gbTdzeW8BklfELZMfRfryj0V9ZIVXzNmk2b9ydIiS9xHvJ4j0-mq4s7UBZuwNZGVm7jIXkQBCjRz7EsVCcaHYchAgZcYyqK6lAv6-osPTq93fYPgp99Qc_e-Rn4Gfsy2AYirY_wm3GB617tDp1PeErbXfYe7xzk1_RTrhzTzTlPw0jBu_NU-vt8dz-hdcLutPnHXDrxrs_oyw6oT5nCQXHtAp-N7P9kbanbAc2FUtTpEzXEP-yggj0YP0BuaK6rQvosBXuhGgcWZ2yED0eeSAiG4w-TWu67C8JnXdL7AkC3RUY3uoWHo2gz5Ltkty0ywlIc6VPSn3r9t6L34fHVi0F40pWykAfhiDX-JuzqnJcSDb5FqN-M3O4czlmigTPO6doA0C964w5Ygta6qQpfktCbH6s88AU2h8oC_fD0sI-w4YxSrHh4f-pII6oNVcKBwTS8c65Gr_hA3lZNoM3Wd4YeyOLDWgU7V6o2Vb_spEWXb5CM7cjgMm-68aXRG5zGdFxtgYqqoAaKvqECKl3Qxq4BxHn8TP9Kn5_Tx5e_cR9OdwHjoHK0BlNKh9GdvVElDn7mW-2zgd3pA811_SarLeHcL9Q_PghjROXe8DnGYNFW86Dn_2G1oAdhMeY3ctsYKKhAV_Kurz431ZwPrNlO6rRvV7h6eLneWhuaNVtqsA9wbctwbhJwy3XbZlvoW4HWKfbklcPhEJw9c9Kcr_H48HXWbNFNJLr368mq8BLiHktRNUJ5abTbgaGFzpsSKtfSNGB1Y3KwVFdKVkCFaylg0L-PjV-wuEI-0-kU2IGqvXs7Idv7K21FbXStLT1oU6CqPl0Jk-86fctSVIWlBpRPd07jpG4wJiNstYTvyexbmWmFIarLtmnxZsITT3VGC2nx8JaZgj5t4kFdNWVN9Yb2Nly1AL_8pqnaDq7Psr1M7MgurjCcMhSO8AXD49K1-LbJvKI8ZscwIXxJ-NjY-gZC3CHEFwil3qsegRG-ZMfcp2EP40vzEFLeIYX8DHXUpuUyhkK2VPDLMAD0ABdcfC3BsSEbs76RIzGrlWszxABQEvVAszNQiY17y0Qcf8EkGXcAPBxkEnsmbT_3CyqiR5oMIk080u8AbTqg6IKSA-tOnm73JNTw_FnYz4_O87-Bdzc7hmE29Uewr-qLaXiTyqyXNxqfoRSIDopdhUobfbeEniV99LEBqHwAyd5CKnqk8ZDQ4cYLfWqCbm5O8A5nzH6InX-4OTHtocYDUAObg1ubE1mPNBvcHLTx2Ldbt_aW9dliEg-e0NO5EMcbAL04k4toFkXx--kmm3QI0wt5DTiPMDyjV3EaDoQIxJNOR3nlkb6Xwh_X7MiZfxcyhN7nnGny7yTJe00TNnjAI2_vWtmLI36PRfIy-RdNWV_XjXct-KN2ModzSTgdZvqtKWvfPp-PL4mWXq_grphHxSyaiTuYh9MojhJMb3e7eSxikRRhOJtGBWNJOA1jNg0nPBZitpkyfifn7XvBcMJZFLFxMI0hiyabsYgywaeznMQMSiFVgA0qFuo7aW0D85CzMA7vlMhAWf_Gk3P_WgA7-PHqzsz9K0DfSMRMSevsGcJJp2C-9C81R5_56ReHpQejq-2P7z3uGqPm1x3MVrpdkwW5LrvXjf1bx9rob5A7wteeKfYxHdn9nP8_AAD__15GyUo">