<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">