[llvm] r217065 - unique_ptrify a bunch of stuff through RuntimeDyld::loadObject

Alexey Samsonov vonosmas at gmail.com
Thu Sep 4 11:44:56 PDT 2014


On Wed, Sep 3, 2014 at 12:48 PM, David Blaikie <dblaikie at gmail.com> wrote:

> Author: dblaikie
> Date: Wed Sep  3 14:48:09 2014
> New Revision: 217065
>
> URL: http://llvm.org/viewvc/llvm-project?rev=217065&view=rev
> Log:
> unique_ptrify a bunch of stuff through RuntimeDyld::loadObject
>
> Modified:
>     llvm/trunk/include/llvm/ExecutionEngine/ObjectBuffer.h
>     llvm/trunk/include/llvm/ExecutionEngine/ObjectImage.h
>     llvm/trunk/include/llvm/ExecutionEngine/RuntimeDyld.h
>     llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp
>     llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.h
>     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h
>     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
>     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
>     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h
>     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h
>     llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/ObjectBuffer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/ObjectBuffer.h?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/ObjectBuffer.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/ObjectBuffer.h Wed Sep  3
> 14:48:09 2014
> @@ -29,7 +29,7 @@ class ObjectBuffer {
>    virtual void anchor();
>  public:
>    ObjectBuffer() {}
> -  ObjectBuffer(MemoryBuffer* Buf) : Buffer(Buf) {}
> +  ObjectBuffer(std::unique_ptr<MemoryBuffer> Buf) :
> Buffer(std::move(Buf)) {}
>    virtual ~ObjectBuffer() {}
>
>    MemoryBufferRef getMemBuffer() const { return
> Buffer->getMemBufferRef(); }
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/ObjectImage.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/ObjectImage.h?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/ObjectImage.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/ObjectImage.h Wed Sep  3
> 14:48:09 2014
> @@ -31,7 +31,7 @@ protected:
>    std::unique_ptr<ObjectBuffer> Buffer;
>
>  public:
> -  ObjectImage(ObjectBuffer *Input) : Buffer(Input) {}
> +  ObjectImage(std::unique_ptr<ObjectBuffer> Input) :
> Buffer(std::move(Input)) {}
>    virtual ~ObjectImage() {}
>
>    virtual object::symbol_iterator begin_symbols() const = 0;
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/RuntimeDyld.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/RuntimeDyld.h?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/RuntimeDyld.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/RuntimeDyld.h Wed Sep  3
> 14:48:09 2014
> @@ -53,13 +53,15 @@ public:
>    /// Ownership of the input buffer is transferred to the ObjectImage
>    /// instance returned from this function if successful. In the case of
> load
>    /// failure, the input buffer will be deleted.
> -  ObjectImage *loadObject(ObjectBuffer *InputBuffer);
> +  std::unique_ptr<ObjectImage>
> +  loadObject(std::unique_ptr<ObjectBuffer> InputBuffer);
>
>    /// Prepare the referenced object file for execution.
>    /// Ownership of the input object is transferred to the ObjectImage
>    /// instance returned from this function if successful. In the case of
> load
>    /// failure, the input object will be deleted.
> -  ObjectImage *loadObject(std::unique_ptr<object::ObjectFile>
> InputObject);
> +  std::unique_ptr<ObjectImage>
> +  loadObject(std::unique_ptr<object::ObjectFile> InputObject);
>
>    /// Get the address of our local copy of the symbol. This may or may not
>    /// be the address used for relocation (clients can copy the data around
>
> Modified: llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp (original)
> +++ llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp Wed Sep  3 14:48:09 2014
> @@ -82,15 +82,9 @@ MCJIT::~MCJIT() {
>
>    Dyld.deregisterEHFrames();
>
> -  LoadedObjectList::iterator it, end;
> -  for (it = LoadedObjects.begin(), end = LoadedObjects.end(); it != end;
> ++it) {
> -    ObjectImage *Obj = *it;
> -    if (Obj) {
> +  for (auto &Obj : LoadedObjects)
> +    if (Obj)
>        NotifyFreeingObject(*Obj);
> -      delete Obj;
> -    }
> -  }
> -  LoadedObjects.clear();
>
>    Archives.clear();
>  }
> @@ -106,11 +100,11 @@ bool MCJIT::removeModule(Module *M) {
>  }
>
>  void MCJIT::addObjectFile(std::unique_ptr<object::ObjectFile> Obj) {
> -  ObjectImage *LoadedObject = Dyld.loadObject(std::move(Obj));
> +  std::unique_ptr<ObjectImage> LoadedObject =
> Dyld.loadObject(std::move(Obj));
>    if (!LoadedObject || Dyld.hasError())
>      report_fatal_error(Dyld.getErrorString());
>
> -  LoadedObjects.push_back(LoadedObject);
> +  LoadedObjects.push_back(std::move(LoadedObject));
>

>    NotifyObjectEmitted(*LoadedObject);
>

Hm? You can't really dereference LoadedObject after you std::move'd it, can
you?



>  }
> @@ -183,9 +177,10 @@ void MCJIT::generateCodeForModule(Module
>    std::unique_ptr<ObjectBuffer> ObjectToLoad;
>    // Try to load the pre-compiled object from cache if possible
>    if (ObjCache) {
> -    std::unique_ptr<MemoryBuffer>
> PreCompiledObject(ObjCache->getObject(M));
> -    if (PreCompiledObject.get())
> -      ObjectToLoad.reset(new ObjectBuffer(PreCompiledObject.release()));
> +    if (std::unique_ptr<MemoryBuffer> PreCompiledObject =
> +            ObjCache->getObject(M))
> +      ObjectToLoad =
> +          llvm::make_unique<ObjectBuffer>(std::move(PreCompiledObject));
>    }
>
>    // If the cache did not contain a suitable object, compile the object
> @@ -196,8 +191,8 @@ void MCJIT::generateCodeForModule(Module
>
>    // Load the object into the dynamic linker.
>    // MCJIT now owns the ObjectImage pointer (via its LoadedObjects list).
> -  ObjectImage *LoadedObject = Dyld.loadObject(ObjectToLoad.release());
> -  LoadedObjects.push_back(LoadedObject);
> +  std::unique_ptr<ObjectImage> LoadedObject =
> +      Dyld.loadObject(std::move(ObjectToLoad));
>    if (!LoadedObject)
>      report_fatal_error(Dyld.getErrorString());
>
> @@ -206,6 +201,8 @@ void MCJIT::generateCodeForModule(Module
>
>    NotifyObjectEmitted(*LoadedObject);
>
> +  LoadedObjects.push_back(std::move(LoadedObject));
> +
>    OwnedModules.markModuleAsLoaded(M);
>  }
>
> @@ -563,10 +560,8 @@ void MCJIT::NotifyObjectEmitted(const Ob
>  }
>  void MCJIT::NotifyFreeingObject(const ObjectImage& Obj) {
>    MutexGuard locked(lock);
> -  for (unsigned I = 0, S = EventListeners.size(); I < S; ++I) {
> -    JITEventListener *L = EventListeners[I];
> +  for (JITEventListener *L : EventListeners)
>      L->NotifyFreeingObject(Obj);
> -  }
>  }
>
>  uint64_t LinkingMemoryManager::getSymbolAddress(const std::string &Name) {
>
> Modified: llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.h?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.h (original)
> +++ llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.h Wed Sep  3 14:48:09 2014
> @@ -219,8 +219,7 @@ class MCJIT : public ExecutionEngine {
>    SmallVector<object::OwningBinary<object::Archive>, 2> Archives;
>    SmallVector<std::unique_ptr<MemoryBuffer>, 2> Buffers;
>
> -  typedef SmallVector<ObjectImage *, 2> LoadedObjectList;
> -  LoadedObjectList  LoadedObjects;
> +  SmallVector<std::unique_ptr<ObjectImage>, 2> LoadedObjects;
>
>    // An optional ObjectCache to be notified of compiled objects and used
> to
>    // perform lookup of pre-compiled code to avoid re-compilation.
>
> Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h
> (original)
> +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h Wed
> Sep  3 14:48:09 2014
> @@ -36,16 +36,13 @@ protected:
>
>    // This form of the constructor allows subclasses to use
>    // format-specific subclasses of ObjectFile directly
> -  ObjectImageCommon(ObjectBuffer *Input,
> std::unique_ptr<object::ObjectFile> Obj)
> -  : ObjectImage(Input), // saves Input as Buffer and takes ownership
> -    ObjFile(std::move(Obj))
> -  {
> -  }
> +  ObjectImageCommon(std::unique_ptr<ObjectBuffer> Input,
> +                    std::unique_ptr<object::ObjectFile> Obj)
> +      : ObjectImage(std::move(Input)), ObjFile(std::move(Obj)) {}
>
>  public:
> -  ObjectImageCommon(ObjectBuffer* Input)
> -  : ObjectImage(Input) // saves Input as Buffer and takes ownership
> -  {
> +  ObjectImageCommon(std::unique_ptr<ObjectBuffer> Input)
> +      : ObjectImage(std::move(Input)) {
>      // FIXME: error checking? createObjectFile returns an
> ErrorOr<ObjectFile*>
>      // and should probably be checked for failure.
>      MemoryBufferRef Buf = Buffer->getMemBuffer();
>
> Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp (original)
> +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp Wed Sep  3
> 14:48:09 2014
> @@ -794,7 +794,8 @@ createRuntimeDyldMachO(Triple::ArchType
>    return Dyld;
>  }
>
> -ObjectImage *RuntimeDyld::loadObject(std::unique_ptr<ObjectFile>
> InputObject) {
> +std::unique_ptr<ObjectImage>
> +RuntimeDyld::loadObject(std::unique_ptr<ObjectFile> InputObject) {
>    std::unique_ptr<ObjectImage> InputImage;
>
>    ObjectFile &Obj = *InputObject;
> @@ -816,19 +817,21 @@ ObjectImage *RuntimeDyld::loadObject(std
>      report_fatal_error("Incompatible object format!");
>
>    Dyld->loadObject(InputImage.get());
> -  return InputImage.release();
> +  return InputImage;
>  }
>
> -ObjectImage *RuntimeDyld::loadObject(ObjectBuffer *InputBuffer) {
> +std::unique_ptr<ObjectImage>
> +RuntimeDyld::loadObject(std::unique_ptr<ObjectBuffer> InputBuffer) {
>    std::unique_ptr<ObjectImage> InputImage;
>    sys::fs::file_magic Type =
> sys::fs::identify_magic(InputBuffer->getBuffer());
> +  auto *InputBufferPtr = InputBuffer.get();
>
>    switch (Type) {
>    case sys::fs::file_magic::elf_relocatable:
>    case sys::fs::file_magic::elf_executable:
>    case sys::fs::file_magic::elf_shared_object:
>    case sys::fs::file_magic::elf_core:
> -    InputImage.reset(RuntimeDyldELF::createObjectImage(InputBuffer));
> +    InputImage =
> RuntimeDyldELF::createObjectImage(std::move(InputBuffer));
>      if (!Dyld)
>        Dyld = createRuntimeDyldELF(MM, ProcessAllSections,
> Checker).release();
>      break;
> @@ -842,7 +845,7 @@ ObjectImage *RuntimeDyld::loadObject(Obj
>    case sys::fs::file_magic::macho_bundle:
>    case sys::fs::file_magic::macho_dynamically_linked_shared_lib_stub:
>    case sys::fs::file_magic::macho_dsym_companion:
> -    InputImage.reset(RuntimeDyldMachO::createObjectImage(InputBuffer));
> +    InputImage =
> RuntimeDyldMachO::createObjectImage(std::move(InputBuffer));
>      if (!Dyld)
>        Dyld = createRuntimeDyldMachO(
>
> static_cast<Triple::ArchType>(InputImage->getArch()),
> @@ -859,11 +862,11 @@ ObjectImage *RuntimeDyld::loadObject(Obj
>      report_fatal_error("Incompatible object format!");
>    }
>
> -  if (!Dyld->isCompatibleFormat(InputBuffer))
> +  if (!Dyld->isCompatibleFormat(InputBufferPtr))
>      report_fatal_error("Incompatible object format!");
>
>    Dyld->loadObject(InputImage.get());
> -  return InputImage.release();
> +  return InputImage;
>  }
>
>  void *RuntimeDyld::getSymbolAddress(StringRef Name) {
>
> Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
> (original)
> +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp Wed Sep
> 3 14:48:09 2014
> @@ -77,8 +77,10 @@ template <class ELFT> class ELFObjectIma
>    bool Registered;
>
>  public:
> -  ELFObjectImage(ObjectBuffer *Input,
> std::unique_ptr<DyldELFObject<ELFT>> Obj)
> -      : ObjectImageCommon(Input, std::move(Obj)), Registered(false) {}
> +  ELFObjectImage(std::unique_ptr<ObjectBuffer> Input,
> +                 std::unique_ptr<DyldELFObject<ELFT>> Obj)
> +      : ObjectImageCommon(std::move(Input), std::move(Obj)),
> Registered(false) {
> +  }
>
>    virtual ~ELFObjectImage() {
>      if (Registered)
> @@ -212,7 +214,8 @@ RuntimeDyldELF::createObjectImageFromFil
>      llvm_unreachable("Unexpected ELF format");
>  }
>
> -ObjectImage *RuntimeDyldELF::createObjectImage(ObjectBuffer *Buffer) {
> +std::unique_ptr<ObjectImage>
> +RuntimeDyldELF::createObjectImage(std::unique_ptr<ObjectBuffer> Buffer) {
>    if (Buffer->getBufferSize() < ELF::EI_NIDENT)
>      llvm_unreachable("Unexpected ELF object size");
>    std::pair<unsigned char, unsigned char> Ident =
> @@ -226,28 +229,30 @@ ObjectImage *RuntimeDyldELF::createObjec
>      auto Obj =
>          llvm::make_unique<DyldELFObject<ELFType<support::little, 4,
> false>>>(
>              Buf, ec);
> -    return new ELFObjectImage<ELFType<support::little, 4, false>>(
> -        Buffer, std::move(Obj));
> -  } else if (Ident.first == ELF::ELFCLASS32 &&
> -             Ident.second == ELF::ELFDATA2MSB) {
> +    return llvm::make_unique<
> +        ELFObjectImage<ELFType<support::little, 4,
> false>>>(std::move(Buffer),
> +
> std::move(Obj));
> +  }
> +  if (Ident.first == ELF::ELFCLASS32 && Ident.second == ELF::ELFDATA2MSB)
> {
>      auto Obj =
>          llvm::make_unique<DyldELFObject<ELFType<support::big, 4,
> false>>>(Buf,
>
>  ec);
> -    return new ELFObjectImage<ELFType<support::big, 4, false>>(Buffer,
> -
>  std::move(Obj));
> -  } else if (Ident.first == ELF::ELFCLASS64 &&
> -             Ident.second == ELF::ELFDATA2MSB) {
> +    return llvm::make_unique<ELFObjectImage<ELFType<support::big, 4,
> false>>>(
> +        std::move(Buffer), std::move(Obj));
> +  }
> +  if (Ident.first == ELF::ELFCLASS64 && Ident.second == ELF::ELFDATA2MSB)
> {
>      auto Obj = llvm::make_unique<DyldELFObject<ELFType<support::big, 8,
> true>>>(
>          Buf, ec);
> -    return new ELFObjectImage<ELFType<support::big, 8, true>>(Buffer,
> std::move(Obj));
> -  } else if (Ident.first == ELF::ELFCLASS64 &&
> -             Ident.second == ELF::ELFDATA2LSB) {
> -    auto Obj =
> -        llvm::make_unique<DyldELFObject<ELFType<support::little, 8,
> true>>>(Buf,
> -
>   ec);
> -    return new ELFObjectImage<ELFType<support::little, 8, true>>(Buffer,
> std::move(Obj));
> -  } else
> -    llvm_unreachable("Unexpected ELF format");
> +    return llvm::make_unique<ELFObjectImage<ELFType<support::big, 8,
> true>>>(
> +        std::move(Buffer), std::move(Obj));
> +  }
> +  assert(Ident.first == ELF::ELFCLASS64 && Ident.second ==
> ELF::ELFDATA2LSB &&
> +         "Unexpected ELF format");
> +  auto Obj =
> +      llvm::make_unique<DyldELFObject<ELFType<support::little, 8,
> true>>>(Buf,
> +
> ec);
> +  return llvm::make_unique<ELFObjectImage<ELFType<support::little, 8,
> true>>>(
> +      std::move(Buffer), std::move(Obj));
>  }
>
>  RuntimeDyldELF::~RuntimeDyldELF() {}
>
> Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h (original)
> +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h Wed Sep  3
> 14:48:09 2014
> @@ -119,7 +119,8 @@ public:
>                      ObjSectionToIDMap &SectionMap) override;
>    virtual ~RuntimeDyldELF();
>
> -  static ObjectImage *createObjectImage(ObjectBuffer *InputBuffer);
> +  static std::unique_ptr<ObjectImage>
> +  createObjectImage(std::unique_ptr<ObjectBuffer> InputBuffer);
>    static ObjectImage
> *createObjectImageFromFile(std::unique_ptr<object::ObjectFile> Obj);
>  };
>
>
> Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h
> (original)
> +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h Wed Sep
> 3 14:48:09 2014
> @@ -103,8 +103,9 @@ protected:
>
>  public:
>    /// Create an ObjectImage from the given ObjectBuffer.
> -  static ObjectImage *createObjectImage(ObjectBuffer *InputBuffer) {
> -    return new ObjectImageCommon(InputBuffer);
> +  static std::unique_ptr<ObjectImage>
> +  createObjectImage(std::unique_ptr<ObjectBuffer> InputBuffer) {
> +    return llvm::make_unique<ObjectImageCommon>(std::move(InputBuffer));
>    }
>
>    /// Create an ObjectImage from the given ObjectFile.
>
> Modified: llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp?rev=217065&r1=217064&r2=217065&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp (original)
> +++ llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp Wed Sep  3 14:48:09 2014
> @@ -203,8 +203,8 @@ static int printLineInfoForInput() {
>
>      std::unique_ptr<ObjectImage> LoadedObject;
>      // Load the object file
> -    LoadedObject.reset(
> -        Dyld.loadObject(new ObjectBuffer(InputBuffer.get().release())));
> +    LoadedObject = Dyld.loadObject(
> +        llvm::make_unique<ObjectBuffer>(std::move(*InputBuffer)));
>      if (!LoadedObject) {
>        return Error(Dyld.getErrorString());
>      }
> @@ -264,8 +264,8 @@ static int executeInput() {
>        return Error("unable to read input: '" + EC.message() + "'");
>      std::unique_ptr<ObjectImage> LoadedObject;
>      // Load the object file
> -    LoadedObject.reset(
> -        Dyld.loadObject(new ObjectBuffer(InputBuffer.get().release())));
> +    LoadedObject = Dyld.loadObject(
> +        llvm::make_unique<ObjectBuffer>(std::move(*InputBuffer)));
>      if (!LoadedObject) {
>        return Error(Dyld.getErrorString());
>      }
> @@ -427,8 +427,8 @@ static int linkAndVerify() {
>
>      std::unique_ptr<ObjectImage> LoadedObject;
>      // Load the object file
> -    LoadedObject.reset(
> -        Dyld.loadObject(new ObjectBuffer(InputBuffer.get().release())));
> +    LoadedObject = Dyld.loadObject(
> +        llvm::make_unique<ObjectBuffer>(std::move(*InputBuffer)));
>      if (!LoadedObject) {
>        return Error(Dyld.getErrorString());
>      }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



-- 
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140904/706ab3ec/attachment.html>


More information about the llvm-commits mailing list