<div dir="ltr"><div class="gmail_extra"><div>On Fri, Apr 5, 2013 at 2:23 PM, Nick Kledzik <span dir="ltr"><<a href="mailto:kledzik@apple.com" target="_blank">kledzik@apple.com</a>></span> wrote:<br></div><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Can you explain what was wrong previously?<br>
<br>
I was intentionally passing the unqiue_ptr<MemoryBuffer> by reference because sometimes the constructed lld::File takes ownership of the buffer and sometimes it does not.<br>
<span><font color="#888888"><br>
-Nick<br></font></span></blockquote><div><br></div><div style>Ah, sorry, I misread the docs and thought there were other issues. I'll revert.</div><div><br></div><div>- Michael Spencer<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<span><font color="#888888">
</font></span><div><div><br>
On Apr 5, 2013, at 2:08 PM, Michael J. Spencer <<a href="mailto:bigcheesegs@gmail.com" target="_blank">bigcheesegs@gmail.com</a>> wrote:<br>
> Author: mspencer<br>
> Date: Fri Apr  5 16:08:30 2013<br>
> New Revision: 178914<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=178914&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=178914&view=rev</a><br>
> Log:<br>
> Correctly pass ownership of MemoryBuffers.<br>
><br>
> Modified:<br>
>    lld/trunk/include/lld/Core/TargetInfo.h<br>
>    lld/trunk/include/lld/ReaderWriter/CoreTargetInfo.h<br>
>    lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h<br>
>    lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h<br>
>    lld/trunk/include/lld/ReaderWriter/Reader.h<br>
>    lld/trunk/include/lld/ReaderWriter/ReaderArchive.h<br>
>    lld/trunk/include/lld/ReaderWriter/ReaderLinkerScript.h<br>
>    lld/trunk/lib/Core/TargetInfo.cpp<br>
>    lld/trunk/lib/ReaderWriter/CoreTargetInfo.cpp<br>
>    lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp<br>
>    lld/trunk/lib/ReaderWriter/ELF/Reader.cpp<br>
>    lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp<br>
>    lld/trunk/lib/ReaderWriter/Native/ReaderNative.cpp<br>
>    lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp<br>
>    lld/trunk/lib/ReaderWriter/Reader.cpp<br>
>    lld/trunk/lib/ReaderWriter/ReaderArchive.cpp<br>
>    lld/trunk/lib/ReaderWriter/ReaderLinkerScript.cpp<br>
>    lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp<br>
><br>
> Modified: lld/trunk/include/lld/Core/TargetInfo.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/TargetInfo.h?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/TargetInfo.h?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/include/lld/Core/TargetInfo.h (original)<br>
> +++ lld/trunk/include/lld/Core/TargetInfo.h Fri Apr  5 16:08:30 2013<br>
> @@ -260,19 +260,19 @@ public:<br>
>   /// \param [out] result The instantiated lld::File object is returned here.<br>
>   /// The \p result is a vector because some input files parse into more than<br>
>   /// one lld::File (e.g. YAML).<br>
> -  virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &inputBuff,<br>
> -                        std::vector<std::unique_ptr<File>> &result) const = 0;<br>
> -<br>
> +  virtual error_code<br>
> +  parseFile(std::unique_ptr<MemoryBuffer> inputBuff,<br>
> +            std::vector<std::unique_ptr<File>> &result) const = 0;<br>
> +<br>
>   /// This is a wrapper around parseFile() where the input file is specified<br>
>   /// by file system path.  The default implementation reads the input file<br>
>   /// into a memory buffer and calls parseFile().<br>
>   ///<br>
>   /// \param path This is the file system path to the input file.<br>
>   /// \param [out] result The instantiated lld::File object is returned here.<br>
> -  virtual error_code readFile(StringRef path,<br>
> -                        std::vector<std::unique_ptr<File>> &result) const;<br>
> +  virtual error_code<br>
> +  readFile(StringRef path, std::vector<std::unique_ptr<File>> &result) const;<br>
><br>
> -<br>
>   /// This method is called by core linking to give the Writer a chance<br>
>   /// to add file format specific "files" to set of files to be linked. This is<br>
>   /// how file format specific atoms can be added to the link.<br>
><br>
> Modified: lld/trunk/include/lld/ReaderWriter/CoreTargetInfo.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/CoreTargetInfo.h?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/CoreTargetInfo.h?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/include/lld/ReaderWriter/CoreTargetInfo.h (original)<br>
> +++ lld/trunk/include/lld/ReaderWriter/CoreTargetInfo.h Fri Apr  5 16:08:30 2013<br>
> @@ -30,11 +30,10 @@ public:<br>
>   virtual ErrorOr<Reference::Kind>    relocKindFromString(StringRef str) const;<br>
>   virtual ErrorOr<std::string> stringFromRelocKind(Reference::Kind kind) const;<br>
><br>
> +  virtual error_code<br>
> +  parseFile(std::unique_ptr<MemoryBuffer> mb,<br>
> +            std::vector<std::unique_ptr<File>> &result) const;<br>
><br>
> -  virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,<br>
> -                        std::vector<std::unique_ptr<File>> &result) const;<br>
> -<br>
> -<br>
>   void addPassNamed(StringRef name) {<br>
>     _passNames.push_back(name);<br>
>   }<br>
><br>
> Modified: lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h (original)<br>
> +++ lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h Fri Apr  5 16:08:30 2013<br>
> @@ -57,10 +57,10 @@ public:<br>
>   }<br>
>   virtual bool validate(raw_ostream &diagnostics);<br>
><br>
> +  virtual error_code<br>
> +  parseFile(std::unique_ptr<MemoryBuffer> mb,<br>
> +            std::vector<std::unique_ptr<File>> &result) const;<br>
><br>
> -  virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,<br>
> -                        std::vector<std::unique_ptr<File>> &result) const;<br>
> -<br>
>   static std::unique_ptr<ELFTargetInfo> create(llvm::Triple);<br>
><br>
>   /// \brief Does this relocation belong in the dynamic plt relocation table?<br>
><br>
> Modified: lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h (original)<br>
> +++ lld/trunk/include/lld/ReaderWriter/MachOTargetInfo.h Fri Apr  5 16:08:30 2013<br>
> @@ -31,9 +31,10 @@ public:<br>
>   virtual ErrorOr<Reference::Kind> relocKindFromString(StringRef str) const;<br>
>   virtual ErrorOr<std::string> stringFromRelocKind(Reference::Kind kind) const;<br>
>   virtual bool validate(raw_ostream &diagnostics);<br>
> -<br>
> -  virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,<br>
> -                        std::vector<std::unique_ptr<File>> &result) const;<br>
> +<br>
> +  virtual error_code<br>
> +  parseFile(std::unique_ptr<MemoryBuffer> mb,<br>
> +            std::vector<std::unique_ptr<File>> &result) const;<br>
><br>
>   uint32_t getCPUType() const;<br>
>   uint32_t getCPUSubType() const;<br>
><br>
> Modified: lld/trunk/include/lld/ReaderWriter/Reader.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/Reader.h?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/Reader.h?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/include/lld/ReaderWriter/Reader.h (original)<br>
> +++ lld/trunk/include/lld/ReaderWriter/Reader.h Fri Apr  5 16:08:30 2013<br>
> @@ -39,8 +39,9 @@ public:<br>
>   /// file) and create a File object.<br>
>   ///<br>
>   /// On success, the resulting File object takes ownership of the MemoryBuffer.<br>
> -  virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,<br>
> -                          std::vector<std::unique_ptr<File>> &result) const = 0;<br>
> +  virtual error_code<br>
> +  parseFile(std::unique_ptr<MemoryBuffer> mb,<br>
> +            std::vector<std::unique_ptr<File>> &result) const = 0;<br>
><br>
> protected:<br>
>   // only concrete subclasses can be instantiated<br>
><br>
> Modified: lld/trunk/include/lld/ReaderWriter/ReaderArchive.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ReaderArchive.h?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ReaderArchive.h?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/include/lld/ReaderWriter/ReaderArchive.h (original)<br>
> +++ lld/trunk/include/lld/ReaderWriter/ReaderArchive.h Fri Apr  5 16:08:30 2013<br>
> @@ -35,7 +35,7 @@ public:<br>
><br>
>   /// \brief Returns a vector of Files that are contained in the archive file<br>
>   ///        pointed to by the Memorybuffer<br>
> -  error_code parseFile(std::unique_ptr<llvm::MemoryBuffer> &mb,<br>
> +  error_code parseFile(std::unique_ptr<llvm::MemoryBuffer> mb,<br>
>                        std::vector<std::unique_ptr<File>> &result) const;<br>
><br>
> private:<br>
><br>
> Modified: lld/trunk/include/lld/ReaderWriter/ReaderLinkerScript.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ReaderLinkerScript.h?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ReaderLinkerScript.h?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/include/lld/ReaderWriter/ReaderLinkerScript.h (original)<br>
> +++ lld/trunk/include/lld/ReaderWriter/ReaderLinkerScript.h Fri Apr  5 16:08:30 2013<br>
> @@ -26,7 +26,7 @@ public:<br>
><br>
>   /// \brief Returns a vector of Files that are contained in the archive file<br>
>   ///        pointed to by the Memorybuffer<br>
> -  error_code parseFile(std::unique_ptr<llvm::MemoryBuffer> &mb,<br>
> +  error_code parseFile(std::unique_ptr<llvm::MemoryBuffer> mb,<br>
>                        std::vector<std::unique_ptr<File>> &result) const;<br>
> };<br>
><br>
><br>
> Modified: lld/trunk/lib/Core/TargetInfo.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/TargetInfo.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/TargetInfo.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/Core/TargetInfo.cpp (original)<br>
> +++ lld/trunk/lib/Core/TargetInfo.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -37,9 +37,8 @@ error_code TargetInfo::readFile(StringRe<br>
>   OwningPtr<llvm::MemoryBuffer> opmb;<br>
>   if (error_code ec = llvm::MemoryBuffer::getFileOrSTDIN(path, opmb))<br>
>     return ec;<br>
> -<br>
> -  std::unique_ptr<MemoryBuffer> mb(opmb.take());<br>
> -  return this->parseFile(mb, result);<br>
> +<br>
> +  return this->parseFile(std::unique_ptr<MemoryBuffer>(opmb.take()), result);<br>
> }<br>
><br>
> error_code TargetInfo::writeFile(const File &linkedFile) const {<br>
><br>
> Modified: lld/trunk/lib/ReaderWriter/CoreTargetInfo.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/CoreTargetInfo.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/CoreTargetInfo.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/ReaderWriter/CoreTargetInfo.cpp (original)<br>
> +++ lld/trunk/lib/ReaderWriter/CoreTargetInfo.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -358,12 +358,12 @@ void CoreTargetInfo::addPasses(PassManag<br>
>   }<br>
> }<br>
><br>
> -<br>
> -error_code CoreTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb,<br>
> -                            std::vector<std::unique_ptr<File>> &result) const {<br>
> +error_code<br>
> +CoreTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> mb,<br>
> +                          std::vector<std::unique_ptr<File>> &result) const {<br>
>   if (!_reader)<br>
> -      _reader = createReaderYAML(*this);<br>
> -  return _reader->parseFile(mb,result);<br>
> +    _reader = createReaderYAML(*this);<br>
> +  return _reader->parseFile(std::move(mb), result);<br>
> }<br>
><br>
> Writer &CoreTargetInfo::writer() const {<br>
><br>
> Modified: lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp (original)<br>
> +++ lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -91,28 +91,27 @@ bool ELFTargetInfo::isDynamic() const {<br>
>   return false;<br>
> }<br>
><br>
> -<br>
> -error_code ELFTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb,<br>
> -                          std::vector<std::unique_ptr<File>> &result) const {<br>
> +error_code<br>
> +ELFTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> mb,<br>
> +                         std::vector<std::unique_ptr<File>> &result) const {<br>
>   if (!_elfReader)<br>
>     _elfReader = createReaderELF(*this);<br>
> -  error_code ec = _elfReader->parseFile(mb, result);<br>
> -  if (ec) {<br>
> -    // Not an ELF file, check file extension to see if it might be yaml<br>
> -    StringRef path = mb->getBufferIdentifier();<br>
> -    if ( path.endswith(".objtxt") ) {<br>
> -      if (!_yamlReader)<br>
> -          _yamlReader = createReaderYAML(*this);<br>
> -      ec = _yamlReader->parseFile(mb, result);<br>
> -    }<br>
> -    if (ec) {<br>
> -      // Not a yaml file, assume it is a linkerscript<br>
> -      if (!_linkerScriptReader)<br>
> -        _linkerScriptReader.reset(new ReaderLinkerScript(*this));<br>
> -      ec = _linkerScriptReader->parseFile(mb, result);<br>
> -    }<br>
> +  std::string path = mb->getBufferIdentifier();<br>
> +  auto magic = llvm::sys::fs::identify_magic(mb->getBuffer());<br>
> +  if (magic == llvm::sys::fs::file_magic::elf_relocatable ||<br>
> +      magic == llvm::sys::fs::file_magic::elf_shared_object ||<br>
> +      magic == llvm::sys::fs::file_magic::archive)<br>
> +    return _elfReader->parseFile(std::move(mb), result);<br>
> +  // Not an ELF file, check file extension to see if it might be yaml<br>
> +  if (StringRef(path).endswith(".objtxt")) {<br>
> +    if (!_yamlReader)<br>
> +      _yamlReader = createReaderYAML(*this);<br>
> +    return _yamlReader->parseFile(std::move(mb), result);<br>
>   }<br>
> -  return ec;<br>
> +  // Not a yaml file, assume it is a linkerscript<br>
> +  if (!_linkerScriptReader)<br>
> +    _linkerScriptReader.reset(new ReaderLinkerScript(*this));<br>
> +  return _linkerScriptReader->parseFile(std::move(mb), result);<br>
> }<br>
><br>
> Writer &ELFTargetInfo::writer() const {<br>
><br>
> Modified: lld/trunk/lib/ReaderWriter/ELF/Reader.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Reader.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Reader.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/ReaderWriter/ELF/Reader.cpp (original)<br>
> +++ lld/trunk/lib/ReaderWriter/ELF/Reader.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -82,8 +82,8 @@ public:<br>
>       : lld::Reader(ti), _elfTargetInfo(ti), _readerArchive(ti, *this) {<br>
>   }<br>
><br>
> -  error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,<br>
> -                       std::vector<std::unique_ptr<File> > &result) const {<br>
> +  error_code parseFile(std::unique_ptr<MemoryBuffer> mb,<br>
> +                       std::vector<std::unique_ptr<File>> &result) const {<br>
>     using llvm::object::ELFType;<br>
>     llvm::sys::LLVMFileType fileType =<br>
>         llvm::sys::IdentifyFileType(mb->getBufferStart(),<br>
> @@ -96,7 +96,7 @@ public:<br>
>     switch (fileType) {<br>
>     case llvm::sys::ELF_Relocatable_FileType: {<br>
>       std::unique_ptr<File> f(createELF<ELFFileCreateELFTraits>(<br>
> -          getElfArchType(&*mb), MaxAlignment, _elfTargetInfo, std::move(mb),<br>
> +          getElfArchType(mb.get()), MaxAlignment, _elfTargetInfo, std::move(mb),<br>
>           ec));<br>
>       if (ec)<br>
>         return ec;<br>
> @@ -105,14 +105,15 @@ public:<br>
>     }<br>
>     case llvm::sys::ELF_SharedObject_FileType: {<br>
>       auto f = createELF<DynamicFileCreateELFTraits>(<br>
> -          getElfArchType(&*mb), MaxAlignment, _elfTargetInfo, std::move(mb));<br>
> +          getElfArchType(mb.get()), MaxAlignment, _elfTargetInfo,<br>
> +                         std::move(mb));<br>
>       if (!f)<br>
>         return f;<br>
>       result.push_back(std::move(*f));<br>
>       break;<br>
>     }<br>
>     case llvm::sys::Archive_FileType:<br>
> -      ec = _readerArchive.parseFile(mb, result);<br>
> +      ec = _readerArchive.parseFile(std::move(mb), result);<br>
>       break;<br>
>     default:<br>
>       return llvm::make_error_code(llvm::errc::executable_format_error);<br>
><br>
> Modified: lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp (original)<br>
> +++ lld/trunk/lib/ReaderWriter/MachO/MachOTargetInfo.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -209,19 +209,18 @@ void MachOTargetInfo::addPasses(PassMana<br>
>   pm.add(std::unique_ptr<Pass>(new LayoutPass()));<br>
> }<br>
><br>
> -<br>
> -<br>
> -error_code MachOTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb,<br>
> -                          std::vector<std::unique_ptr<File>> &result) const {<br>
> +error_code MachOTargetInfo::parseFile(<br>
> +    std::unique_ptr<MemoryBuffer> mb,<br>
> +    std::vector<std::unique_ptr<File>> &result) const {<br>
> //  if (!_machoReader)<br>
> //    _machoReader = createReaderMachO(*this);<br>
> //  error_code ec = _machoReader->parseFile(mb,result);<br>
> //  if (ec) {<br>
>     if (!_yamlReader)<br>
>       _yamlReader = createReaderYAML(*this);<br>
> -      return _yamlReader->parseFile(mb,result);<br>
> +    return _yamlReader->parseFile(std::move(mb), result);<br>
> //  }<br>
> -<br>
> +<br>
>   return error_code::success();<br>
> }<br>
><br>
><br>
> Modified: lld/trunk/lib/ReaderWriter/Native/ReaderNative.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/Native/ReaderNative.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/Native/ReaderNative.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/ReaderWriter/Native/ReaderNative.cpp (original)<br>
> +++ lld/trunk/lib/ReaderWriter/Native/ReaderNative.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -915,9 +915,9 @@ public:<br>
>   Reader(const TargetInfo &ti)<br>
>    : lld::Reader(ti) {}<br>
><br>
> -  virtual error_code parseFile(<br>
> -      std::unique_ptr<MemoryBuffer> &mb,<br>
> -      std::vector<std::unique_ptr<lld::File> > &result) const {<br>
> +  virtual error_code<br>
> +  parseFile(std::unique_ptr<MemoryBuffer> mb,<br>
> +            std::vector<std::unique_ptr<lld::File>> &result) const {<br>
>     return File::make(_targetInfo, mb, mb->getBufferIdentifier(), result);<br>
>   }<br>
> };<br>
><br>
> Modified: lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp (original)<br>
> +++ lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -369,8 +369,8 @@ class ReaderCOFF : public Reader {<br>
> public:<br>
>   ReaderCOFF(const TargetInfo &ti) : Reader(ti) {}<br>
><br>
> -  error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,<br>
> -                       std::vector<std::unique_ptr<File> > &result) const {<br>
> +  error_code parseFile(std::unique_ptr<MemoryBuffer> mb,<br>
> +                       std::vector<std::unique_ptr<File>> &result) const {<br>
>     llvm::error_code ec;<br>
>     std::unique_ptr<File> f(new FileCOFF(_targetInfo, std::move(mb), ec));<br>
>     if (ec) {<br>
><br>
> Modified: lld/trunk/lib/ReaderWriter/Reader.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/Reader.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/Reader.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/ReaderWriter/Reader.cpp (original)<br>
> +++ lld/trunk/lib/ReaderWriter/Reader.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -24,7 +24,6 @@ error_code Reader::readFile(StringRef pa<br>
>   if (error_code ec = llvm::MemoryBuffer::getFileOrSTDIN(path, opmb))<br>
>     return ec;<br>
><br>
> -  std::unique_ptr<MemoryBuffer> mb(opmb.take());<br>
> -  return this->parseFile(mb, result);<br>
> +  return parseFile(std::unique_ptr<MemoryBuffer>(opmb.take()), result);<br>
> }<br>
> } // end namespace lld<br>
><br>
> Modified: lld/trunk/lib/ReaderWriter/ReaderArchive.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ReaderArchive.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ReaderArchive.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/ReaderWriter/ReaderArchive.cpp (original)<br>
> +++ lld/trunk/lib/ReaderWriter/ReaderArchive.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -48,7 +48,7 @@ public:<br>
>     if (_targetInfo.logInputFiles())<br>
>       llvm::outs() << buff->getBufferIdentifier() << "\n";<br>
>     std::unique_ptr<MemoryBuffer> mb(buff.take());<br>
> -    if (_targetInfo.parseFile(mb, result))<br>
> +    if (_targetInfo.parseFile(std::move(mb), result))<br>
>       return nullptr;<br>
><br>
>     assert(result.size() == 1);<br>
> @@ -159,8 +159,9 @@ public:<br>
><br>
> // Returns a vector of Files that are contained in the archive file<br>
> // pointed to by the MemoryBuffer<br>
> -error_code ReaderArchive::parseFile(std::unique_ptr<llvm::MemoryBuffer> &mb,<br>
> -                            std::vector<std::unique_ptr<File>> &result) const {<br>
> +error_code<br>
> +ReaderArchive::parseFile(std::unique_ptr<llvm::MemoryBuffer> mb,<br>
> +                         std::vector<std::unique_ptr<File>> &result) const {<br>
>   error_code ec;<br>
><br>
>   if (_targetInfo.forceLoadAllArchives()) {<br>
> @@ -176,7 +177,7 @@ error_code ReaderArchive::parseFile(std:<br>
>       std::unique_ptr<MemoryBuffer> mbc(buff.take());<br>
>       if (_targetInfo.logInputFiles())<br>
>         llvm::outs() << buff->getBufferIdentifier() << "\n";<br>
> -      if ((ec = _targetInfo.parseFile(mbc, result)))<br>
> +      if ((ec = _targetInfo.parseFile(std::move(mbc), result)))<br>
>         return ec;<br>
>     }<br>
>   } else {<br>
><br>
> Modified: lld/trunk/lib/ReaderWriter/ReaderLinkerScript.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ReaderLinkerScript.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ReaderLinkerScript.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/ReaderWriter/ReaderLinkerScript.cpp (original)<br>
> +++ lld/trunk/lib/ReaderWriter/ReaderLinkerScript.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -79,9 +79,9 @@ private:<br>
> } // end anon namespace<br>
><br>
> namespace lld {<br>
> -error_code<br>
> -ReaderLinkerScript::parseFile(std::unique_ptr<llvm::MemoryBuffer> &mb,<br>
> -                            std::vector<std::unique_ptr<File> > &result) const {<br>
> +error_code ReaderLinkerScript::parseFile(<br>
> +    std::unique_ptr<llvm::MemoryBuffer> mb,<br>
> +    std::vector<std::unique_ptr<File>> &result) const {<br>
>   auto lsf = LinkerScriptFile::create(_targetInfo, std::move(mb));<br>
>   if (!lsf)<br>
>     return lsf;<br>
><br>
> Modified: lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp?rev=178914&r1=178913&r2=178914&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp?rev=178914&r1=178913&r2=178914&view=diff</a><br>


> ==============================================================================<br>
> --- lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp (original)<br>
> +++ lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp Fri Apr  5 16:08:30 2013<br>
> @@ -1342,7 +1342,7 @@ class ReaderYAML : public Reader {<br>
> public:<br>
>   ReaderYAML(const TargetInfo &ti) : Reader(ti) {}<br>
><br>
> -  error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,<br>
> +  error_code parseFile(std::unique_ptr<MemoryBuffer> mb,<br>
>                        std::vector<std::unique_ptr<File>> &result) const {<br>
>     // Note: we do not take ownership of the MemoryBuffer.  That is<br>
>     // because yaml may produce multiple File objects, so there is no<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br>
</div></div></blockquote></div><br></div></div>