<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/107317>107317</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Inaccurate debug information in binaries compiled with "-O2" and "-O3"
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
edumoot
</td>
</tr>
</table>
<pre>
The debug information for variables within the for loop, particularly at line 25 and line 26, is misleading, consistently showing `global_shift = 0` and `global_var = 470777959` during step-in or step-over operations [(Godbolt)](https://clang.godbolt.org/z/T1aadhhsf). However, the final results are accurate. When a breakpoint is set at line 34, the debug information correctly displays `global_var = 9` and `global_shift = 16777200`.
This issue can be reproduced in LLVM version of 18.1.8, 17.0.6, and 16.0.3 :
```
clang -g -O3 -o 420_O3.out 420.c
clang -g -O2 -o 420_O2.out 420.c
(lldb) file 420_O3.out
(lldb) b 25
(lldb) r
[...]
* thread #1, name = '420_O3.out', stop reason = breakpoint 1.1
frame #0: 0x0000555555555141 420_O3.out`main [inlined] func_1 at 420.c:25:20
22 for (global_var = 4; global_var != 9; ++global_var)
23 {
24 unsigned char shift_val = 254;
-> 25 global_flag++;
26 global_shift |= (0xF1BB << (*local_var_ptr)) | ((shift_val << 15) * ((*local_var_ptr << global_flag) >= (*global_ptr)));
27 }
28 return global_union;
(lldb) p global_var
(int) 470777959
(lldb) p global_shift
(unsigned int) 0
...
(lldb) s
(lldb) s
(lldb) s
...
(lldb) p global_shift
(unsigned int) 0
(lldb) p global_var
(int) 470777959
```
It also can be repoduced in GDB context:
```
$ gdb 420_O3.out
GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git
....
(gdb) b 25
(gdb) r
[...]
(gdb) p global_var
$1 = 470777959
(gdb) p global_shift
$2 = 0
(gdb) s
(gdb) s
(gdb) s
(gdb) p global_var
$3 = 470777959
(gdb) p global_shift
$4 = 0
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVk-TmzoS_zTypcuU1AKDDz7YM3E2VdnNJdk9TgkQoH2y5JKEJ_M-_SsBwzC259VLXC4Z9__-ddNq4b1qjZQ7kh1I9rgSfeis28m6P1kbVqWtX3bfOwm1LPsWlGmsO4mgrIHGOrgIp0SppYdnFTplIHRyYGhrzwQf4CxcUFWvhdMvIAJoZSRgBsLU0_MmiikPJ-W1FLUybSRU1njlgzRBv4Dv7LMyLZANbbUthX7ynWoCEP4IlGzoYO2NeRFuYKU5zfN8m22jSN27aMIHeV4rA9aNj_YiHdizdENOHiIKWHy2dWl1ILgl2SPBogvh7AnfEzwSPFZamDZpR5nEupbg8U-Cx-9MiLrrfENwm8C_7LO8SBeTGUBRRmhw0vc6eBBOgqiq3okgE_hfJw0IKJ0Uf5ytMiHi4WWYAePpq5nbMlTWOVlFmGrlz1q8-DtQbG9ReoOQbfI8RxqRTAh9JHQ_nt875UF530uohIFSgpNnZ-u-kjUoA1-__vffcJHOxzBsA6xIWFLESFme0GQobPTJNglNOET8RusbOn2HvwOcsG5h_Y3D2kKK9OkbT2wf4mNS3UjhLIXXUtOJhdZ1SXALjdJyYfGGXwJmN0Q3UbJDkiSxAyaBPYTOSVEDQc5idkac5AAhwXzhBPPI9MGewUnhrRlkFuVlCRttAgA0brCCnBK-B_qTUkqz1w9L2TL8DT0JZWKXKhM7oybZIzS9qZ5YbJYRCb7HLB509oEIQOh28GYdECyuXxXCD7CkIRvbhh-A4IHg4Y0Z34rZMJ8Nk_zwRk5ncvz0ZpgxNVSdcDA03tNF6MEzZtH3qLkm_FMcDkvdyW-jRTsGMktHP5t7slNn5w9jZQr688gOByD8gfCHSCC417Yas3k6hyEj3EaNkVssQxyUWDYI4H4SuLbwKvcu2i0Q_mmKgeB-4s3-4neZS76A8vGNXMxkJ0PvzKuP3ihrZgOL7j0vCjkzlYnTbDESP9Qacp_Zc-kmA3T5nsW349qO_-eUe-q_GMbvZX1vCo3nlwBCe7uYd2_j7vPjIV5LQf4MH40ygim0dXkzcD7_58dAJ1j8KHsTemBZQpOMJkgxpSnla9oPDBbjvWG2KsyQJVeTrr0zyNq_nWNXUveQS9nVDfqRzrsypThdyVfS_tcJd4PivxVU-i6oj873hVzVO15v-Vas5I7lmKVFvCNX3Y7xmnJWFSmrBNs0m5I3mBV5LeumYU3GV2o3VG1LU2QZZptkwwqa1lRsKa-KpilJSuVJKJ1ofTnF7WE1XLE7RnPO8pUWpdR-2MYQjXweL2CCGJczt4tK67JvPUmpVj74NzNBBS13X8zrXnFnV1AGSmWEU9JDZU9npWU9bG5AENffkCCOW0L8xwniqnd69377aVXo-jKp7IngMTqfftZnZ_8vq0DwOITsCR6nnC47_CsAAP__llHqhw">