From 1c71488efcfd7b1ddf8d305abcd74fb59728cd67 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Wed, 3 Sep 2014 21:34:34 +0000 Subject: [PATCH] unique_ptrify RuntimeDyldImpl::loadObject I'm not sure this is a particularly helpful API (to pass ownership and then return it unconditionally) rather than just pass the underlying object by non-const reference, but this was the original API so I'll just make it more safe/stable and anyone else is free to adjust that at their whim, of course. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217081 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp | 12 +++++------- lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h | 3 ++- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp index 1f326d8c478..895ba05bccd 100644 --- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp +++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp @@ -137,10 +137,10 @@ static std::error_code getOffset(const SymbolRef &Sym, uint64_t &Result) { return object_error::success; } -ObjectImage *RuntimeDyldImpl::loadObject(ObjectImage *InputObject) { +std::unique_ptr +RuntimeDyldImpl::loadObject(std::unique_ptr Obj) { MutexGuard locked(lock); - std::unique_ptr Obj(InputObject); if (!Obj) return nullptr; @@ -250,7 +250,7 @@ ObjectImage *RuntimeDyldImpl::loadObject(ObjectImage *InputObject) { // Give the subclasses a chance to tie-up any loose ends. finalizeLoad(*Obj, LocalSections); - return Obj.release(); + return Obj; } // A helper method for computeTotalAllocSize. @@ -816,8 +816,7 @@ RuntimeDyld::loadObject(std::unique_ptr InputObject) { if (!Dyld->isCompatibleFile(&Obj)) report_fatal_error("Incompatible object format!"); - Dyld->loadObject(InputImage.get()); - return InputImage; + return Dyld->loadObject(std::move(InputImage)); } std::unique_ptr @@ -865,8 +864,7 @@ RuntimeDyld::loadObject(std::unique_ptr InputBuffer) { if (!Dyld->isCompatibleFormat(InputBufferPtr)) report_fatal_error("Incompatible object format!"); - Dyld->loadObject(InputImage.get()); - return InputImage; + return Dyld->loadObject(std::move(InputImage)); } void *RuntimeDyld::getSymbolAddress(StringRef Name) { diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h index d2c58eb0a64..53ea370196d 100644 --- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h +++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h @@ -373,7 +373,8 @@ public: this->Checker = Checker; } - ObjectImage *loadObject(ObjectImage *InputObject); + std::unique_ptr + loadObject(std::unique_ptr InputObject); uint8_t* getSymbolAddress(StringRef Name) { // FIXME: Just look up as a function for now. Overly simple of course. -- 2.34.1