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 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 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(BinaryOrErr.get().release()); + std::unique_ptr Obj( + dyn_cast(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))