Skip to content

Commit 474bf1e

Browse files
committed
Add comments
1 parent a26d7b8 commit 474bf1e

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7924,6 +7924,9 @@ void CodeGenModule::moveLazyEmissionStates(CodeGenModule *NewBuilder) {
79247924

79257925
bool CodeGenModule::classNeedsVectorDestructor(const CXXRecordDecl *RD) {
79267926
CXXDestructorDecl *Dtor = RD->getDestructor();
7927+
// The compiler can't know if new[]/delete[] will be used outside of the DLL,
7928+
// so just force vector deleting destructor emission if dllexport is present.
7929+
// This matches MSVC behavior.
79277930
if (Dtor && Dtor->isVirtual() && Dtor->isDefined() &&
79287931
Dtor->hasAttr<DLLExportAttr>())
79297932
return true;
@@ -7935,6 +7938,14 @@ bool CodeGenModule::classNeedsVectorDestructor(const CXXRecordDecl *RD) {
79357938
void CodeGenModule::requireVectorDestructorDefinition(const CXXRecordDecl *RD) {
79367939
assert(getCXXABI().hasVectorDeletingDtors());
79377940
RequireVectorDeletingDtor.insert(RD);
7941+
7942+
// To reduce code size in general case we lazily emit scalar deleting
7943+
// destructor definition and an alias from vector deleting destructor to
7944+
// scalar deleting destructor. It may happen that we first emitted the scalar
7945+
// deleting destructor definition and the alias and then discovered that the
7946+
// definition of the vector deleting destructor is required. Then we need to
7947+
// remove the alias and the scalar deleting destructor and queue vector
7948+
// deleting destructor body for emission. Check if that is the case.
79387949
CXXDestructorDecl *DtorD = RD->getDestructor();
79397950
GlobalDecl ScalarDtorGD(DtorD, Dtor_Deleting);
79407951
StringRef MangledName = getMangledName(ScalarDtorGD);

0 commit comments

Comments
 (0)