aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authornerix <nerixdev@outlook.de>2025-09-09 17:04:33 +0200
committerGitHub <noreply@github.com>2025-09-09 17:04:33 +0200
commit406d6bd153a69a132f24363702cd116d0edcdb50 (patch)
tree8274c8f87dccbdae3cea1a4e38f8510c34d030d8 /clang/lib/CodeGen/CodeGenModule.cpp
parent9c858f568062e44dd5ac8ad5280fae4eb75ce69d (diff)
downloadllvm-406d6bd153a69a132f24363702cd116d0edcdb50.zip
llvm-406d6bd153a69a132f24363702cd116d0edcdb50.tar.gz
llvm-406d6bd153a69a132f24363702cd116d0edcdb50.tar.bz2
[LLDB][NativePDB] Mark blocks as parsed after parsing (#157493)
After parsing blocks in a function, the blocks should be marked as parsed for them to be dumped (see [Function::Dump](https://github.com/llvm/llvm-project/blob/e6aefbec782dbb57f72eb0ae399ed944fe49db2e/lldb/source/Symbol/Function.cpp#L446-L447)). As explained in https://github.com/llvm/llvm-project/issues/114906#issuecomment-3255016266, this happens (accidentally?) in the DIA plugin when parsing variables, because it calls `function.GetBlock(can_create=true)` which marks blocks as parsed. In the native plugin, this was never called, so blocks and variables were never included in the `lldb-test symbols` output. The `variables.test` for the DIA plugin tests this. One difference between the plugins is how they specify the location of local variables. This causes the output of the native plugin to be two lines per variable, whereas the DIA plugin has one line: ``` (native): 000002C4B7593020: Variable{0x1c800001}, name = "var_arg1", type = {0000000000000744} 0x000002C4B6CA7900 (int), scope = parameter, location = 0x00000000: [0x000000014000102c, 0x000000014000103e): DW_OP_breg7 RSP+8 ``` ``` (DIA): 000002778C827EE0: Variable{0x0000001b}, name = "var_arg1", type = {0000000000000005} 0x000002778C1FBAB0 (int), scope = parameter, decl = VariablesTest.cpp:32, location = DW_OP_breg7 RSP+8 ``` In the test, I filtered lines starting with spaces followed by `[0x`, so we can still use `CHECK-NEXT`. --- Another difference between the plugins is that DIA marks the `this` pointer as artificial (equivalent to DWARF). This is done if a variable's object kind is `ObjectPtr` ([source](https://github.com/llvm/llvm-project/blob/ab898f32c60689d1d47d0b6de66c30d3476994bb/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp#L1050)). As far as I know, there isn't anything in the debug info that says "this variable is the `this` pointer" other than the name/type of a variable and the type of the function.
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions