[mach-o] fix leak in atoms -> normalized
authorNick Kledzik <kledzik@apple.com>
Fri, 5 Dec 2014 22:03:28 +0000 (22:03 +0000)
committerNick Kledzik <kledzik@apple.com>
Fri, 5 Dec 2014 22:03:28 +0000 (22:03 +0000)
llvm-svn: 223530

lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp

index 19a7e45..34781d5 100644 (file)
@@ -95,6 +95,7 @@ class Util {
 public:
   Util(const MachOLinkingContext &ctxt)
       : _context(ctxt), _archHandler(ctxt.archHandler()), _entryAtom(nullptr) {}
+  ~Util();
 
   void      assignAtomsToSections(const lld::File &atomFile);
   void      organizeSections();
@@ -170,6 +171,22 @@ private:
   std::vector<const Atom *>     _machHeaderAliasAtoms;
 };
 
+Util::~Util() {
+  // The SectionInfo structs are BumpPtr allocated, but atomsAndOffsets needs
+  // to be deleted.
+  for (SectionInfo *si : _sectionInfos) {
+    // clear() destroys vector elements, but does not deallocate.
+    // Instead use swap() to deallocate vector buffer.
+    std::vector<AtomInfo> empty;
+    si->atomsAndOffsets.swap(empty);
+  }
+  // The SegmentInfo structs are BumpPtr allocated, but sections needs
+  // to be deleted.
+  for (SegmentInfo *sgi : _segmentInfos) {
+    std::vector<SectionInfo*> empty2;
+    sgi->sections.swap(empty2);
+  }
+}
 
 SectionInfo *Util::getRelocatableSection(DefinedAtom::ContentType type) {
   StringRef segmentName;