diff options
| author | Vladislav Dzhidzhoev <vdzhidzhoev@accesssoftek.com> | 2025-11-17 13:10:54 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-17 13:10:54 +0100 |
| commit | 82ba3f5d316c102aad1b0721d64c028a8724a3a4 (patch) | |
| tree | 76675abc58a4f9bc2be85b96e6ed048194e2805c /lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp | |
| parent | 7e730da128df186a63c6fde19693129322024c50 (diff) | |
[clang][DebugInfo] Clear retained nodes list of vararg trunk's DISubprogram (#167758)
This fixes the issue reported in
https://github.com/llvm/llvm-project/pull/166855#issuecomment-3518604073
that had been revealed after
https://github.com/llvm/llvm-project/pull/166855 was merged.
`CodeGenFunction::GenerateVarArgsThunk` creates thunks for vararg
functions by cloning and modifying them. It is different from
`CodeGenFunction::generateThunk`, which is used for Itanium ABI.
According to https://reviews.llvm.org/D39396,
`CodeGenFunction::GenerateVarArgsThunk` may be called before metadata
nodes are resolved. So, it tries to avoid remapping DISubprogram and all
metadata nodes it references inside `CloneFunction()` by manually
cloning DISubprogram.
If optimization level is not OptNone, DILocalVariables for a function
are saved in DISubprogram's retainedNodes field. When
`CodeGenFunction::GenerateVarArgsThunk` clones such DISubprogram without
remapping, it produces a subprogram with incorrectly-scoped retained
nodes. It triggers Verifier checks added in
https://github.com/llvm/llvm-project/pull/166855.
To solve that, retained nodes list of a cloned DISubprogram is cleared.
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp')
0 files changed, 0 insertions, 0 deletions
