[clang] [Clang,debuginfo] added vtt parameter in destructor DISubroutineType (PR #130674)

via cfe-commits cfe-commits at lists.llvm.org
Fri Mar 28 10:05:40 PDT 2025


Markus =?utf-8?q?Gschoßmann?= <markus.gschossmann at tum.de>,
Markus =?utf-8?q?Gschoßmann?= <markus.gschossmann at tum.de>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/130674 at github.com>


================
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s
----------------
mgschossmann wrote:

Thanks for your comment. Indeed, my code changes behavior when compiling for i686-pc-windows-msvc, which I did not expect.
However, there seems to be the same problem: There is an implicit parameter `should_call_delete`, whose `DILocalVariable` has `arg: 2` even though there is no second argument in the function type's `types` array. Similarly to `vtt`, the patched code adds this parameter to the array. 

Additionally, it changes the return type of the destructor to a void pointer. I am unsure, why this happens, since that does not happen on ItaniumABI. Does the MSVC ABI feature an implicit void return? Unfortunately, I am lacking knowledge of the MSVC ABI to be able to judge what the correct behavior should be.


Following are clang outputs for `debug-info-vtt.cpp`:
[clang_outputs.zip](https://github.com/user-attachments/files/19509545/clang_outputs.zip)

PS: I am unsure whether the bug is that the AST is not correctly updated in `clang/lib/CodeGen/ItaniumCXXABI.cpp` (and `clang/lib/CodeGen/MicrosoftCXXABI.cpp`) or that the AST is not correctly read in `clang/lib/CodeGen/CGDebugInfo.cpp`. In the former case, my patch feels like a workaround.

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


More information about the cfe-commits mailing list