[Lldb-commits] [clang] [lldb] Reland [MS][clang] Add support for vector deleting destructors (PR #165598)
Hans Wennborg via lldb-commits
lldb-commits at lists.llvm.org
Mon Nov 24 02:13:35 PST 2025
zmodem wrote:
> I'll prepare a revert to unblock for now and will work on bringing this back in December.
Thanks! I hope we can help figure this out together.
I think the repro was maybe not exactly representative of the failure we're seeing. Here's another attempt:
```
$ cat /tmp/a.cc
void operator delete(void*, size_t) {}
void operator delete[](void*, size_t) {}
template <typename T> struct RefCounted {
void operator delete[](void *p) { } // <--- Missing symbol.
};
struct __declspec(dllexport) DrawingBuffer : public RefCounted<DrawingBuffer> {
DrawingBuffer();
virtual ~DrawingBuffer();
};
DrawingBuffer::DrawingBuffer() {}
DrawingBuffer::~DrawingBuffer() {}
$ build/bin/clang-cl -fuse-ld=lld /GR- /LD /Zc:dllexportInlines- /tmp/a.cc /link /nodefaultlib /noentry
lld-link: error: undefined symbol: public: static void __cdecl RefCounted<struct DrawingBuffer>::operator delete[](void *)
>>> referenced by /tmp/a-f60332.obj:(public: virtual void * __cdecl DrawingBuffer::`vector deleting dtor'(unsigned int))
clang-cl: error: linker command failed with exit code 1 (use -v to see invocation)
```
I suspect the issue is something along the lines of: because of `/Zc:dllexportInlines-`, `RefCounted<>::operator delete[]` is not dllexported, but treated as a regular inline function, which means it's only emitted when referenced, and although it is referenced by `DrawingBuffer::vector deleting dtor`, we fail to actually mark it as such, causing the link error.
https://github.com/llvm/llvm-project/pull/165598
More information about the lldb-commits
mailing list