[MS] Emit exported complete/vbase destructors
Summary:
Fixes PR44205
I checked, and deleting destructors are not affected.
Reviewers: hans
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D70931
diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
index 8196df6..800d02d 100644
--- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp
+++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
@@ -1343,6 +1343,13 @@
// The TU defining a dtor is only guaranteed to emit a base destructor. All
// other destructor variants are delegating thunks.
CGM.EmitGlobal(GlobalDecl(D, Dtor_Base));
+
+ // If the class is dllexported, emit the complete (vbase) destructor wherever
+ // the base dtor is emitted.
+ // FIXME: To match MSVC, this should only be done when the class is exported
+ // with -fdllexport-inlines enabled.
+ if (D->getParent()->getNumVBases() > 0 && D->hasAttr<DLLExportAttr>())
+ CGM.EmitGlobal(GlobalDecl(D, Dtor_Complete));
}
CharUnits