[llvm] [CodeView] Match MSVC implicit this records for Visual Studio (PR #214289)

via llvm-commits llvm-commits at lists.llvm.org
Sat Aug 8 07:16:05 PDT 2026


GkvJwa wrote:

> I think this is more of a bug with the Visual Studio debugger. Both LLDB and WinDbg will show the value of `this` when it's available.
> 
> Long aside: The range for `this` looks slightly off. I'll use the example from above. You can also check it on compiler explorer: https://godbolt.org/z/3caPTnha7
> 
> ```assembly
> ; foo::foo() [addr = 0001:0032, code size = 24]:
>    140001020:	50                   	push   rax
>    140001021:	48 89 0c 24          	mov    QWORD PTR [rsp],rcx
>    140001025:	48 8b 04 24          	mov    rax,QWORD PTR [rsp]      ;                        ⎤ "Real" range of `this`
>    140001029:	c7 00 01 00 00 00    	mov    DWORD PTR [rax],0x1      ; ⎤ DEFRANGE of this     │
>    14000102f:	c7 40 04 02 00 00 00 	mov    DWORD PTR [rax+0x4],0x2  ; │ [0001:0041,+15)      │
>    140001036:	59                   	pop    rcx                      ; │                      ⎦
>    140001037:	c3                   	ret                             ; ⎦
> ```
> 
> We say that `this` ranges from `[0x140001029, 0x140001038)`, but you can see in the disassembly, that `[rsp]` is set to the `this` value at `0x140001021` - so one instruction after, we already have the value. Similar for the end: with `pop rcx`, we remove the value from the stack, so at the `ret`, `this` is no longer at `[rcx]`.

Thank you for the reply. However, this isn't actually a bug—the debugger is designed to parse it this way. For example, when we previously added compatibility for lambda display, special recognition of __this was required.
see: https://github.com/llvm/llvm-project/issues/71562

Of course, the last fix was specifically requested from Microsoft's relevant developers, who were informed to specifically parse "__this"

https://github.com/llvm/llvm-project/pull/214289


More information about the llvm-commits mailing list