<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/144061>144061</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[lldb] Step over can step too far
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lldb
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
labath
</td>
</tr>
</table>
<pre>
```
$ cat a.cc
void f1() {}
void f2() {}
void __attribute__((always_inline)) f3() { f2(); }
int main() {
f1();
f3();
return 0;
}
$ clang -g a.cc
$ ~/ll/build/opt/bin/lldb ./a.out
(lldb) target create "./a.out"
Current executable set to '/tmp/R/a.out' (x86_64).
(lldb) b main
Breakpoint 1: where = a.out`main + 19 at a.cc:6:3, address = 0x00000000000011a3
(lldb) r
Process 8667 launched: '/tmp/R/a.out' (x86_64)
Process 8667 stopped
* thread #1, name = 'a.out', stop reason = breakpoint 1.1
frame #0: 0x00005555555551a3 a.out`main at a.cc:6:3
3 void __attribute__((always_inline)) f3() { f2(); }
4
5 int main() {
-> 6 f1();
7 f3();
8 return 0;
9 }
(lldb) disassemble
a.out`main:
0x555555555190 <+0>: endbr64
0x555555555194 <+4>: pushq %rbp
0x555555555195 <+5>: movq %rsp, %rbp
0x555555555198 <+8>: subq $0x10, %rsp
0x55555555519c <+12>: movl $0x0, -0x4(%rbp)
-> 0x5555555551a3 <+19>: callq 0x555555555160 ; f1 at a.cc:1
0x5555555551a8 <+24>: callq 0x555555555170 ; f2 at a.cc:2
0x5555555551ad <+29>: xorl %eax, %eax
0x5555555551af <+31>: addq $0x10, %rsp
0x5555555551b3 <+35>: popq %rbp
0x5555555551b4 <+36>: retq
(lldb) next
Process 8667 stopped
* thread #1, name = 'a.out', stop reason = step over
frame #0: 0x00005555555551ad a.out`main at a.cc:8:3
5 int main() {
6 f1();
7 f3();
-> 8 return 0;
9 }
```
The step operation should stop at 0x5555555551a8, and not 0x5555555551ad. I expect this happens because, after stepping out of `f1`, the code finds itself thinking it's in `f3` and decides it should step out of that.
This is a relatively recent regression as lldb-19 (at least) doesn't exhibit this behavior (it correctly stops at 0x5555555551a8).
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0Vs1u6zYTfRp6M4jBH_0uvJCTa-DbfWi7DyhpZLGXFhWS8nU2ffaClOTYqQNk0RoBIpJzzswcDjmUzqnjgLgj6Z6kLxs5-d7YnZa19P2mNu37jmR0-aMV4Qk00oPcNg2h1dmoFjpGeEF4CSTfk_zlOs0fTr--Su-tqiePr6_RopD6l3x3r2rQakDCywDqxAf6SkXEHmYqQis1eDhJNdx4oRVcoyFiGYv7sUU_2QHoPF7YQlZaDkd4Oq6phbm_CD9oTfihnpRuCT-Y0YdRcHrQuq1hS_hBbs3kIUKKMBmi8dIe0UNjUXoEwvnVkHBOaPU8WYuDB7xgM3lZawSHHrwBwnPCD_40En747QOUA-HFpches4TwcnvvrZ6FoNXeovw5miANI6KCXz1aBCJeYKbJaDAEwvfASlj3UVQZEZUg_Blk21p0LkLohd78GJPi3qsltPq_NU2wL7IsBy2noemxDZ6_lcZnAufNOGIb3VTge4uyBcIFC6EN8jSnQni-soX5AAKL0pkhLtc3GmxZ3HOAzkY0FzQEN2eWrj8mxb0-n4WJHAIILf_FEgaABCCQzoM0fD4s6icifkA22_6zwCG_rnwqdSjWlfuih3LxuxT_dUdb5aRzeArlSGh1qwkR1SIlvXwIV1Ig4pnwPSXiR1AWcGhrmyXwyDhZjJPVeJxc_wZAeGrr8REiXRDpijiZ81u0d2PY-6-RxYIsVqSb6reQNk_ohdEV7B6CmwXM-II-mbNewRH7RC9JFDv6j5Ucd-mOR4qVp1x4Gqn1251NFhTcQ8duio49iEmuCfHkS6584eI3XPwRV7tyrXFdjJ3zS1FeFm3CF63ugd0CFGwByrb9rqr1qoZYd3M049vXW1iv5SKyxd6ij87uanbAi_9P7hHncQRzRvu9K6T96gopPq6QdD53X3Su6xH_7gmPFffVGYdPp_y2idPqjx6XBEe00iszgOvNpNtZBuk_FV_sDUMLg_m00m7hf4CXERsPvlcOejmOODiosZGTwwjsPNroblTDEUK3NB2QjHYsBMSfwfcIjWkROjW0DpR3qLvAN_wMCBX2yEHoXBntBMloDKbFRrUYzD-CDynN_L6XfrtmqxwoBxIsaunVGfU7WGxCB7Z4DB0vKCAdhKp6YmXoUtKDRul8vBgNuoHwPDTsXtVqybXGXp6VscFceWiMtdh4_R5FdI9ULLebdifaUpRygzuWJ2XBclqKTb9rE5nUTJZIecl5kZRJx1mOJaayZnmTbNSOU57SjAnGWcH4VshC8DqVCc9LKhJKEoonqfRW6_Npa-xxo5ybcMeShGZso2WN2sWHHufz8eHhyWd3wf6pno6OJFQr590Hg1dex8dhBKQv8Pt6LKCRwyy4NwY6aTeT1bve-9GFZsEPhB-OyvdTvW3MKT6Yzuu_p9GaP7EJj6kYoiP8sER53vG_AwAA___O-N_o">