<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60855>60855</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Using gnu_asm_goto_with_outputs_full without optimizations returns uninitialized memory
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
josephcsible
</td>
</tr>
</table>
<pre>
Consider this C code:
```c
#if !__has_extension(gnu_asm_goto_with_outputs_full)
#error Need the gnu_asm_goto_with_outputs_full extension
#endif
int main(void) {
int x = 123;
asm goto("mov %1, %0\n\tjmp %l[label]" : "=r" (x) : "r" (45) : : label);
x = 6;
label:
return x;
}
```
It's supposed to return 45. But when compiled on Clang trunk (4be17641b05df1e63fa8e069af92676f1246eb83) without optimizations, it produces this assembly:
```asm
main: # @main
pushq %rbp
movq %rsp, %rbp
movl $0, -4(%rbp)
movl $123, -8(%rbp)
movl $45, %eax
movl %eax, %eax
jmp .LBB0_3
movl %eax, -16(%rbp) # 4-byte Spill
movl %eax, -12(%rbp) # 4-byte Spill
jmp .LBB0_1
.LBB0_1:
movl -12(%rbp), %eax # 4-byte Reload
movl %eax, -8(%rbp)
movl $6, -8(%rbp)
.LBB0_2:
movl -8(%rbp), %eax
popq %rbp
retq
.LBB0_3: # Block address taken
movl -16(%rbp), %eax # 4-byte Reload
movl %eax, -8(%rbp)
jmp .LBB0_2
```
Which ends up returning uninitialized memory (the `-16(%rbp)` from the third-to-last line) instead. If I instead compile with any optimization level (other than `-O0`), then it produces correct assembly.
https://godbolt.org/z/fnPcYY44G
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVs1u4zYQfhr6MrAhURIlH3SIbbgIULRFi6LYk0GJY4sJRSoklb-nL0jZTuI6mwV6WCKIMH-cjzNfZsKdkweNWJNiRYrNjI--M7a-Mw6HrnWyUThrjHip10Y7KdCC76SDNbRGIMluSLIhyQ1hyfTTHmWayT0Qmu52HXc7fPaonTSa0Oqgxx13_e5gvNk9Sd_tzOiH0bvdflSK0OX5BrTWWPgNUYDvEL4fCG85zvFayP0kSe2h5zLkfzRSELoEUq4mGwTjM5BsAynNSHZSAwB3PYR0hFaE0t48AqFFSug6fBNSrDUp1v6uH4KsSLFSvEFFig2hFEh2A4RSkm1sFGn1HPNO6pMuL87K7AameLr8gGLCxj7oJsdT-YPGoh-thuezGyk3F82ZxFtPaOnAjcNgXKitOcXmxQJWo4enDjW0ph-kQgFGw1pxfQBvR30fMTeYlixPm6QQ-xRZtucVJmzJ90vKSrZPac6wqbLwstAoM3owg5e9fOVeGu1CBaWHwRoxtugmSnHnsG_Uy39JxV0_aWILY_0yIHkSxXMBwhlG1z0AhHbYZvho681jMEWbG45NvOalgNA8CQ7zPHY-ep2I-cExXpcH2gTv6oe8Q8djbuTPnzlF2ydegW7hLH5drZJddhX-KX6esveY4PKEQubz5sUj_DVIpb7CM0_p_7gvIJ9Qp5PhJLzn8fvEF-neKvK9xH-iMlx8-ZIfaxb7zHeCTj-HXl1HfsFXMzxcpaFF__A-URZo_8UJNVgp094DF8Kic-D5PerPSst-RmnfKECvDqd_Otl2gFo4GIfjXJL6AKOWWnrJlXxFAT32xr6EURQWA2HJ5WtYAntr-rg3fCetmHszV9x5UFJjYK7UziMXC7jdw-1JOg29OLWA65cPYwsUPmL466qM7-Ii5Dom_z3in4row-x8P9taYy22_jzeFsd3x9-d94MLHKJbQrcHIxqj_MLYA6HbV0K3e_1H--1bnv8yE3UmltmSz7BOWcnKkpbLctbVNGFcVJznFSuahpVlRlssRVPRgrWiFDNZ04RmCU2XCU2ztFygSEpeZS3LeEqLZUXyBHsu1UKpxz7knknnRqxZUhXFLC4aF_87oFTjE0Rj2GvFZmbrEDNvxoMjeaKk8-7tFi-9wvpvF9r3xe6-uiSO3XdXez8braovqid9NzaL1vSEbgOK42c-WHOHrSd0G7E7Qrfxbf8GAAD__yw4f-4">