diff --git a/llvm/lib/Object/Binary.cpp b/llvm/lib/Object/Binary.cpp
index 4d52427..f1da11c 100644
--- a/llvm/lib/Object/Binary.cpp
+++ b/llvm/lib/Object/Binary.cpp
@@ -42,30 +42,26 @@
   return Data->getBufferIdentifier();
 }
 
-error_code object::createBinary(MemoryBuffer *Source,
-                                OwningPtr<Binary> &Result) {
+ErrorOr<Binary *> object::createBinary(MemoryBuffer *Source) {
   OwningPtr<MemoryBuffer> scopedSource(Source);
-  if (!Source)
-    return make_error_code(errc::invalid_argument);
   sys::fs::file_magic type = sys::fs::identify_magic(Source->getBuffer());
-  error_code ec;
+  error_code EC;
   switch (type) {
     case sys::fs::file_magic::archive: {
-      OwningPtr<Binary> ret(new Archive(scopedSource.take(), ec));
-      if (ec) return ec;
-      Result.swap(ret);
-      return object_error::success;
+      OwningPtr<Binary> Ret(new Archive(scopedSource.take(), EC));
+      if (EC)
+        return EC;
+      return Ret.take();
     }
     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: {
-      OwningPtr<Binary> ret(
-        ObjectFile::createELFObjectFile(scopedSource.take()));
-      if (!ret)
+      OwningPtr<Binary> Ret(
+          ObjectFile::createELFObjectFile(scopedSource.take()));
+      if (!Ret)
         return object_error::invalid_file_type;
-      Result.swap(ret);
-      return object_error::success;
+      return Ret.take();
     }
     case sys::fs::file_magic::macho_object:
     case sys::fs::file_magic::macho_executable:
@@ -77,28 +73,26 @@
     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: {
-      OwningPtr<Binary> ret(
-        ObjectFile::createMachOObjectFile(scopedSource.take()));
-      if (!ret)
+      OwningPtr<Binary> Ret(
+          ObjectFile::createMachOObjectFile(scopedSource.take()));
+      if (!Ret)
         return object_error::invalid_file_type;
-      Result.swap(ret);
-      return object_error::success;
+      return Ret.take();
     }
     case sys::fs::file_magic::macho_universal_binary: {
-      OwningPtr<Binary> ret(new MachOUniversalBinary(scopedSource.take(), ec));
-      if (ec) return ec;
-      Result.swap(ret);
-      return object_error::success;
+      OwningPtr<Binary> Ret(new MachOUniversalBinary(scopedSource.take(), EC));
+      if (EC)
+        return EC;
+      return Ret.take();
     }
     case sys::fs::file_magic::coff_object:
     case sys::fs::file_magic::coff_import_library:
     case sys::fs::file_magic::pecoff_executable: {
-      OwningPtr<Binary> ret(
+      OwningPtr<Binary> Ret(
           ObjectFile::createCOFFObjectFile(scopedSource.take()));
-      if (!ret)
+      if (!Ret)
         return object_error::invalid_file_type;
-      Result.swap(ret);
-      return object_error::success;
+      return Ret.take();
     }
     case sys::fs::file_magic::unknown:
     case sys::fs::file_magic::bitcode:
@@ -110,9 +104,9 @@
   llvm_unreachable("Unexpected Binary File Type");
 }
 
-error_code object::createBinary(StringRef Path, OwningPtr<Binary> &Result) {
+ErrorOr<Binary *> object::createBinary(StringRef Path) {
   OwningPtr<MemoryBuffer> File;
-  if (error_code ec = MemoryBuffer::getFileOrSTDIN(Path, File))
-    return ec;
-  return createBinary(File.take(), Result);
+  if (error_code EC = MemoryBuffer::getFileOrSTDIN(Path, File))
+    return EC;
+  return createBinary(File.take());
 }
