Fznamznon wrote: > But operator delete[] is an inline function, and with `/Zc:DllexportInlines-` > it's not different from any other inline function: when it's used by a > caller, clang should emit the definition.
Oh, I'm not sure it is that simple. There is `MarkDeclReferenced` and we don't call it for `operator delete[]` but adding this doesn't help. The vector deleting destructor is emitted for `RefCountedTemplate<int>` but not for `Derived` due to the option. I don't see any definitions for any delete operators in the IR module that contains the vector deleting destructor i.e. object file for bar.cpp. I suppose this is due to the class marked extern but I'm not sure. I think the definition for scalar operator delete come from object file generated for foo.cpp . When compiling foo.cpp there is no `new[]` calls neither `dllexport`, so we don't generate vector deleting destructor for `RefCountedTemplate<int>` there and `operator delete[]` is never emitted due to the option. I think this can be fixed by skipping `/Zc:DllexportInlines-` effect on `operator delete[]` unconditionally when vector deleting destructors are enabled or either skipping the call to `operator delete[]` call in the vector deleting destructor body but given that it is EOD in my time zone and I'm on vacation next week, I'll prepare a revert to unblock for now and will work on bringing this back in December. https://github.com/llvm/llvm-project/pull/165598 _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
