Call the destructors of the MCSections.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 26 May 2015 00:32:28 +0000 (00:32 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 26 May 2015 00:32:28 +0000 (00:32 +0000)
They now contain the fragments. If we don't call the destructors the
fragments leak.

Found by an asan bot.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238161 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCContext.cpp

index 968fd26f326a230c8705ab3551b7ae2aeec4c84d..0a453cdb46b71bed4555c22d513bb5fd08c14693 100644 (file)
@@ -10,6 +10,7 @@
 #include "llvm/MC/MCContext.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/Twine.h"
+#include "llvm/MC/MCAssembler.h"
 #include "llvm/MC/MCAsmInfo.h"
 #include "llvm/MC/MCDwarf.h"
 #include "llvm/MC/MCLabel.h"
@@ -54,6 +55,13 @@ MCContext::MCContext(const MCAsmInfo *mai, const MCRegisterInfo *mri,
 }
 
 MCContext::~MCContext() {
+  // Call the destructors so the fragments are freed
+  for (auto &I : ELFUniquingMap)
+    I.second->~MCSectionELF();
+  for (auto &I : COFFUniquingMap)
+    I.second->~MCSectionCOFF();
+  for (auto &I : MachOUniquingMap)
+    I.second->~MCSectionMachO();
 
   if (AutoReset)
     reset();