[PATCH] D23865: Fix memory leaks in clang-offload-bundler
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 25 00:28:36 PDT 2016
vitalybuka created this revision.
vitalybuka added a reviewer: sfantao.
vitalybuka added a subscriber: llvm-commits.
1. Pair removed from StringMap was not destroyed
2. ObjectFile had no owner
https://reviews.llvm.org/D23865
Files:
tools/clang-offload-bundler/ClangOffloadBundler.cpp
Index: tools/clang-offload-bundler/ClangOffloadBundler.cpp
===================================================================
--- tools/clang-offload-bundler/ClangOffloadBundler.cpp
+++ tools/clang-offload-bundler/ClangOffloadBundler.cpp
@@ -348,10 +348,10 @@
class ObjectFileHandler final : public FileHandler {
/// The object file we are currently dealing with.
- ObjectFile &Obj;
+ std::unique_ptr<ObjectFile> Obj;
/// Return the input file contents.
- StringRef getInputFileContents() const { return Obj.getData(); }
+ StringRef getInputFileContents() const { return Obj->getData(); }
/// Return true if the provided section is an offload section and return the
/// triple by reference.
@@ -400,7 +400,7 @@
void ReadHeader(MemoryBuffer &Input) {}
StringRef ReadBundleStart(MemoryBuffer &Input) {
- while (NextSection != Obj.section_end()) {
+ while (NextSection != Obj->section_end()) {
CurrentSection = NextSection;
++NextSection;
@@ -561,9 +561,10 @@
GV->setSection(SectionName);
}
- ObjectFileHandler(ObjectFile &Obj)
- : FileHandler(), Obj(Obj), CurrentSection(Obj.section_begin()),
- NextSection(Obj.section_begin()) {}
+ ObjectFileHandler(std::unique_ptr<ObjectFile> ObjIn)
+ : FileHandler(), Obj(std::move(ObjIn)),
+ CurrentSection(Obj->section_begin()),
+ NextSection(Obj->section_begin()) {}
~ObjectFileHandler() {}
};
@@ -677,12 +678,13 @@
// We only support regular object files. If this is not an object file,
// default to the binary handler. The handler will be owned by the client of
// this function.
- ObjectFile *Obj = dyn_cast<ObjectFile>(BinaryOrErr.get().release());
+ std::unique_ptr<ObjectFile> Obj(
+ dyn_cast<ObjectFile>(BinaryOrErr.get().release()));
if (!Obj)
return new BinaryFileHandler();
- return new ObjectFileHandler(*Obj);
+ return new ObjectFileHandler(std::move(Obj));
}
/// Return an appropriate handler given the input files and options.
@@ -821,7 +823,7 @@
}
FH.get()->ReadBundle(OutputFile, Input);
FH.get()->ReadBundleEnd(Input);
- Worklist.remove(&*Output);
+ Worklist.erase(Output);
// Record if we found the host bundle.
if (hasHostKind(CurTriple))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23865.69202.patch
Type: text/x-patch
Size: 2267 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160825/e313585b/attachment.bin>
More information about the llvm-commits
mailing list