Revert "Correctly pass ownership of MemoryBuffers."

llvm-svn: 178918
diff --git a/lld/lib/ReaderWriter/CoreTargetInfo.cpp b/lld/lib/ReaderWriter/CoreTargetInfo.cpp
index 75d3727..a4a4333 100644
--- a/lld/lib/ReaderWriter/CoreTargetInfo.cpp
+++ b/lld/lib/ReaderWriter/CoreTargetInfo.cpp
@@ -358,12 +358,11 @@
   }
 }
 
-error_code
-CoreTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> mb,
-                          std::vector<std::unique_ptr<File>> &result) const {
+error_code CoreTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb,
+                            std::vector<std::unique_ptr<File>> &result) const {
   if (!_reader)
     _reader = createReaderYAML(*this);
-  return _reader->parseFile(std::move(mb), result);
+  return _reader->parseFile(mb,result);
 }
 
 Writer &CoreTargetInfo::writer() const {
diff --git a/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp b/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp
index 671df19..db3a032 100644
--- a/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp
+++ b/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp
@@ -91,27 +91,27 @@
   return false;
 }
 
-error_code
-ELFTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> mb,
-                         std::vector<std::unique_ptr<File>> &result) const {
+error_code ELFTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb,
+                          std::vector<std::unique_ptr<File>> &result) const {
   if (!_elfReader)
     _elfReader = createReaderELF(*this);
-  std::string path = mb->getBufferIdentifier();
-  auto magic = llvm::sys::fs::identify_magic(mb->getBuffer());
-  if (magic == llvm::sys::fs::file_magic::elf_relocatable ||
-      magic == llvm::sys::fs::file_magic::elf_shared_object ||
-      magic == llvm::sys::fs::file_magic::archive)
-    return _elfReader->parseFile(std::move(mb), result);
-  // Not an ELF file, check file extension to see if it might be yaml
-  if (StringRef(path).endswith(".objtxt")) {
-    if (!_yamlReader)
-      _yamlReader = createReaderYAML(*this);
-    return _yamlReader->parseFile(std::move(mb), result);
+  error_code ec = _elfReader->parseFile(mb, result);
+  if (ec) {
+    // Not an ELF file, check file extension to see if it might be yaml
+    StringRef path = mb->getBufferIdentifier();
+    if ( path.endswith(".objtxt") ) {
+      if (!_yamlReader)
+          _yamlReader = createReaderYAML(*this);
+      ec = _yamlReader->parseFile(mb, result);
+    }
+    if (ec) {
+      // Not a yaml file, assume it is a linkerscript
+      if (!_linkerScriptReader)
+        _linkerScriptReader.reset(new ReaderLinkerScript(*this));
+      ec = _linkerScriptReader->parseFile(mb, result);
+    }
   }
-  // Not a yaml file, assume it is a linkerscript
-  if (!_linkerScriptReader)
-    _linkerScriptReader.reset(new ReaderLinkerScript(*this));
-  return _linkerScriptReader->parseFile(std::move(mb), result);
+  return ec;
 }
 
 Writer &ELFTargetInfo::writer() const {
diff --git a/lld/lib/ReaderWriter/ELF/Reader.cpp b/lld/lib/ReaderWriter/ELF/Reader.cpp
index 2851761..cb6e9cd 100644
--- a/lld/lib/ReaderWriter/ELF/Reader.cpp
+++ b/lld/lib/ReaderWriter/ELF/Reader.cpp
@@ -82,8 +82,8 @@
       : lld::Reader(ti), _elfTargetInfo(ti), _readerArchive(ti, *this) {
   }
 
-  error_code parseFile(std::unique_ptr<MemoryBuffer> mb,
-                       std::vector<std::unique_ptr<File>> &result) const {
+  error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,
+                       std::vector<std::unique_ptr<File> > &result) const {
     using llvm::object::ELFType;
     llvm::sys::LLVMFileType fileType =
         llvm::sys::IdentifyFileType(mb->getBufferStart(),
@@ -96,7 +96,7 @@
     switch (fileType) {
     case llvm::sys::ELF_Relocatable_FileType: {
       std::unique_ptr<File> f(createELF<ELFFileCreateELFTraits>(
-          getElfArchType(mb.get()), MaxAlignment, _elfTargetInfo, std::move(mb),
+          getElfArchType(&*mb), MaxAlignment, _elfTargetInfo, std::move(mb),
           ec));
       if (ec)
         return ec;
@@ -105,15 +105,14 @@
     }
     case llvm::sys::ELF_SharedObject_FileType: {
       auto f = createELF<DynamicFileCreateELFTraits>(
-          getElfArchType(mb.get()), MaxAlignment, _elfTargetInfo,
-                         std::move(mb));
+          getElfArchType(&*mb), MaxAlignment, _elfTargetInfo, std::move(mb));
       if (!f)
         return f;
       result.push_back(std::move(*f));
       break;
     }
     case llvm::sys::Archive_FileType:
-      ec = _readerArchive.parseFile(std::move(mb), result);
+      ec = _readerArchive.parseFile(mb, result);
       break;
     default:
       return llvm::make_error_code(llvm::errc::executable_format_error);
diff --git a/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp b/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp
index bc01ae0..7ada6da 100644
--- a/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp
+++ b/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp
@@ -209,16 +209,15 @@
   pm.add(std::unique_ptr<Pass>(new LayoutPass()));
 }
 
-error_code MachOTargetInfo::parseFile(
-    std::unique_ptr<MemoryBuffer> mb,
-    std::vector<std::unique_ptr<File>> &result) const {
+error_code MachOTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb,
+                          std::vector<std::unique_ptr<File>> &result) const {
 //  if (!_machoReader)
 //    _machoReader = createReaderMachO(*this);
 //  error_code ec = _machoReader->parseFile(mb,result);
 //  if (ec) {
     if (!_yamlReader)
       _yamlReader = createReaderYAML(*this);
-    return _yamlReader->parseFile(std::move(mb), result);
+    return _yamlReader->parseFile(mb, result);
 //  }
 
   return error_code::success();
diff --git a/lld/lib/ReaderWriter/Native/ReaderNative.cpp b/lld/lib/ReaderWriter/Native/ReaderNative.cpp
index bccd8b8..ac3cf3b 100644
--- a/lld/lib/ReaderWriter/Native/ReaderNative.cpp
+++ b/lld/lib/ReaderWriter/Native/ReaderNative.cpp
@@ -915,9 +915,9 @@
   Reader(const TargetInfo &ti)
    : lld::Reader(ti) {}
 
-  virtual error_code
-  parseFile(std::unique_ptr<MemoryBuffer> mb,
-            std::vector<std::unique_ptr<lld::File>> &result) const {
+  virtual error_code parseFile(
+      std::unique_ptr<MemoryBuffer> &mb,
+      std::vector<std::unique_ptr<lld::File> > &result) const {
     return File::make(_targetInfo, mb, mb->getBufferIdentifier(), result);
   }
 };
diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
index 5b1fde4..b752a79 100644
--- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
+++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
@@ -369,8 +369,8 @@
 public:
   ReaderCOFF(const TargetInfo &ti) : Reader(ti) {}
 
-  error_code parseFile(std::unique_ptr<MemoryBuffer> mb,
-                       std::vector<std::unique_ptr<File>> &result) const {
+  error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,
+                       std::vector<std::unique_ptr<File> > &result) const {
     llvm::error_code ec;
     std::unique_ptr<File> f(new FileCOFF(_targetInfo, std::move(mb), ec));
     if (ec) {
diff --git a/lld/lib/ReaderWriter/Reader.cpp b/lld/lib/ReaderWriter/Reader.cpp
index 7da1f31..9f08ed2 100644
--- a/lld/lib/ReaderWriter/Reader.cpp
+++ b/lld/lib/ReaderWriter/Reader.cpp
@@ -24,6 +24,7 @@
   if (error_code ec = llvm::MemoryBuffer::getFileOrSTDIN(path, opmb))
     return ec;
 
-  return parseFile(std::unique_ptr<MemoryBuffer>(opmb.take()), result);
+  std::unique_ptr<MemoryBuffer> mb(opmb.take());
+  return this->parseFile(mb, result);
 }
 } // end namespace lld
diff --git a/lld/lib/ReaderWriter/ReaderArchive.cpp b/lld/lib/ReaderWriter/ReaderArchive.cpp
index c59a04d..1928e2f 100644
--- a/lld/lib/ReaderWriter/ReaderArchive.cpp
+++ b/lld/lib/ReaderWriter/ReaderArchive.cpp
@@ -48,7 +48,7 @@
     if (_targetInfo.logInputFiles())
       llvm::outs() << buff->getBufferIdentifier() << "\n";
     std::unique_ptr<MemoryBuffer> mb(buff.take());
-    if (_targetInfo.parseFile(std::move(mb), result))
+    if (_targetInfo.parseFile(mb, result))
       return nullptr;
 
     assert(result.size() == 1);
@@ -159,9 +159,8 @@
 
 // Returns a vector of Files that are contained in the archive file
 // pointed to by the MemoryBuffer
-error_code
-ReaderArchive::parseFile(std::unique_ptr<llvm::MemoryBuffer> mb,
-                         std::vector<std::unique_ptr<File>> &result) const {
+error_code ReaderArchive::parseFile(std::unique_ptr<llvm::MemoryBuffer> &mb,
+                            std::vector<std::unique_ptr<File>> &result) const {
   error_code ec;
 
   if (_targetInfo.forceLoadAllArchives()) {
@@ -177,7 +176,7 @@
       std::unique_ptr<MemoryBuffer> mbc(buff.take());
       if (_targetInfo.logInputFiles())
         llvm::outs() << buff->getBufferIdentifier() << "\n";
-      if ((ec = _targetInfo.parseFile(std::move(mbc), result)))
+      if ((ec = _targetInfo.parseFile(mbc, result)))
         return ec;
     }
   } else {
diff --git a/lld/lib/ReaderWriter/ReaderLinkerScript.cpp b/lld/lib/ReaderWriter/ReaderLinkerScript.cpp
index 12f81c9..646f97e 100644
--- a/lld/lib/ReaderWriter/ReaderLinkerScript.cpp
+++ b/lld/lib/ReaderWriter/ReaderLinkerScript.cpp
@@ -79,9 +79,9 @@
 } // end anon namespace
 
 namespace lld {
-error_code ReaderLinkerScript::parseFile(
-    std::unique_ptr<llvm::MemoryBuffer> mb,
-    std::vector<std::unique_ptr<File>> &result) const {
+error_code
+ReaderLinkerScript::parseFile(std::unique_ptr<llvm::MemoryBuffer> &mb,
+                            std::vector<std::unique_ptr<File> > &result) const {
   auto lsf = LinkerScriptFile::create(_targetInfo, std::move(mb));
   if (!lsf)
     return lsf;
diff --git a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
index 26678cc..c07bf56 100644
--- a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
+++ b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
@@ -1342,7 +1342,7 @@
 public:
   ReaderYAML(const TargetInfo &ti) : Reader(ti) {}
 
-  error_code parseFile(std::unique_ptr<MemoryBuffer> mb,
+  error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,
                        std::vector<std::unique_ptr<File>> &result) const {
     // Note: we do not take ownership of the MemoryBuffer.  That is
     // because yaml may produce multiple File objects, so there is no