[llvm] r217279 - Restore the ability to check if LLVMCreateObjectFile was successful

Bjorn Steinbrink bsteinbr at gmail.com
Fri Sep 5 14:22:10 PDT 2014


Author: bsteinbr
Date: Fri Sep  5 16:22:09 2014
New Revision: 217279

URL: http://llvm.org/viewvc/llvm-project?rev=217279&view=rev
Log:
Restore the ability to check if LLVMCreateObjectFile was successful

Summary:
Until r216870 LLVMCreateObjectFile returned nullptr in case of an error,
so callers could check if the call was successful. Now, it always
returns an OwningBinary wrapped as an LLVMObjectFileRef, so callers
can't check if the call was successul.

This results in a segfault running e.g.

 llvm-c-test --object-list-sections < /dev/null

So the old behaviour should be restored.

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D5143

Added:
    llvm/trunk/test/Bindings/llvm-c/objectfile.ll
Modified:
    llvm/trunk/lib/Object/Object.cpp

Modified: llvm/trunk/lib/Object/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/Object.cpp?rev=217279&r1=217278&r2=217279&view=diff
==============================================================================
--- llvm/trunk/lib/Object/Object.cpp (original)
+++ llvm/trunk/lib/Object/Object.cpp Fri Sep  5 16:22:09 2014
@@ -64,9 +64,10 @@ LLVMObjectFileRef LLVMCreateObjectFile(L
   ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr(
       ObjectFile::createObjectFile(Buf->getMemBufferRef()));
   std::unique_ptr<ObjectFile> Obj;
-  if (ObjOrErr)
-    Obj = std::move(ObjOrErr.get());
-  auto *Ret = new OwningBinary<ObjectFile>(std::move(Obj), std::move(Buf));
+  if (!ObjOrErr)
+    return nullptr;
+
+  auto *Ret = new OwningBinary<ObjectFile>(std::move(ObjOrErr.get()), std::move(Buf));
   return wrap(Ret);
 }
 

Added: llvm/trunk/test/Bindings/llvm-c/objectfile.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bindings/llvm-c/objectfile.ll?rev=217279&view=auto
==============================================================================
--- llvm/trunk/test/Bindings/llvm-c/objectfile.ll (added)
+++ llvm/trunk/test/Bindings/llvm-c/objectfile.ll Fri Sep  5 16:22:09 2014
@@ -0,0 +1,2 @@
+; RUN: not llvm-c-test --object-list-sections < /dev/null
+; This used to cause a segfault





More information about the llvm-commits mailing list