[llvm] r213557 - Correct the ownership passing semantics of object::createBinary and make them explicit in the type system.

Rafael EspĂ­ndola rafael.espindola at gmail.com
Mon Jul 28 14:08:48 PDT 2014


Thanks!

On 21 July 2014 12:26, David Blaikie <dblaikie at gmail.com> wrote:
> Author: dblaikie
> Date: Mon Jul 21 11:26:24 2014
> New Revision: 213557
>
> URL: http://llvm.org/viewvc/llvm-project?rev=213557&view=rev
> Log:
> Correct the ownership passing semantics of object::createBinary and make them explicit in the type system.
>
> createBinary documented that it destroyed the parameter in error cases,
> though by observation it does not. By passing the unique_ptr by value
> rather than lvalue reference, callers are now explicit about passing
> ownership and the function implements the documented contract. Remove
> the explicit documentation, since now the behavior cannot be anything
> other than what was documented, so it's redundant.
>
> Also drops a unique_ptr::release in llvm-nm that was always run on a
> null unique_ptr anyway.
>
> Modified:
>     llvm/trunk/include/llvm/Object/Binary.h
>     llvm/trunk/lib/Object/Archive.cpp
>     llvm/trunk/lib/Object/Binary.cpp
>     llvm/trunk/tools/llvm-nm/llvm-nm.cpp
>
> Modified: llvm/trunk/include/llvm/Object/Binary.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/Binary.h?rev=213557&r1=213556&r2=213557&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/Binary.h (original)
> +++ llvm/trunk/include/llvm/Object/Binary.h Mon Jul 21 11:26:24 2014
> @@ -125,10 +125,8 @@ public:
>
>  /// @brief Create a Binary from Source, autodetecting the file type.
>  ///
> -/// @param Source The data to create the Binary from. Ownership is transferred
> -///        to the Binary if successful. If an error is returned,
> -///        Source is destroyed by createBinary before returning.
> -ErrorOr<Binary *> createBinary(std::unique_ptr<MemoryBuffer> &Source,
> +/// @param Source The data to create the Binary from.
> +ErrorOr<Binary *> createBinary(std::unique_ptr<MemoryBuffer> Source,
>                                 LLVMContext *Context = nullptr);
>
>  ErrorOr<Binary *> createBinary(StringRef Path);
>
> Modified: llvm/trunk/lib/Object/Archive.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/Archive.cpp?rev=213557&r1=213556&r2=213557&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Object/Archive.cpp (original)
> +++ llvm/trunk/lib/Object/Archive.cpp Mon Jul 21 11:26:24 2014
> @@ -181,7 +181,7 @@ Archive::Child::getAsBinary(LLVMContext
>    if (std::error_code EC = BuffOrErr.getError())
>      return EC;
>
> -  return createBinary(*BuffOrErr, Context);
> +  return createBinary(std::move(*BuffOrErr), Context);
>  }
>
>  ErrorOr<Archive *> Archive::create(std::unique_ptr<MemoryBuffer> Source) {
>
> Modified: llvm/trunk/lib/Object/Binary.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/Binary.cpp?rev=213557&r1=213556&r2=213557&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Object/Binary.cpp (original)
> +++ llvm/trunk/lib/Object/Binary.cpp Mon Jul 21 11:26:24 2014
> @@ -38,7 +38,7 @@ StringRef Binary::getFileName() const {
>    return Data->getBufferIdentifier();
>  }
>
> -ErrorOr<Binary *> object::createBinary(std::unique_ptr<MemoryBuffer> &Buffer,
> +ErrorOr<Binary *> object::createBinary(std::unique_ptr<MemoryBuffer> Buffer,
>                                         LLVMContext *Context) {
>    sys::fs::file_magic Type = sys::fs::identify_magic(Buffer->getBuffer());
>
> @@ -79,5 +79,5 @@ ErrorOr<Binary *> object::createBinary(S
>        MemoryBuffer::getFileOrSTDIN(Path);
>    if (std::error_code EC = FileOrErr.getError())
>      return EC;
> -  return createBinary(FileOrErr.get());
> +  return createBinary(std::move(*FileOrErr));
>  }
>
> Modified: llvm/trunk/tools/llvm-nm/llvm-nm.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=213557&r1=213556&r2=213557&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original)
> +++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Mon Jul 21 11:26:24 2014
> @@ -993,13 +993,12 @@ static void dumpSymbolNamesFromFile(std:
>        MemoryBuffer::getFileOrSTDIN(Filename);
>    if (error(BufferOrErr.getError(), Filename))
>      return;
> -  std::unique_ptr<MemoryBuffer> Buffer = std::move(BufferOrErr.get());
>
>    LLVMContext &Context = getGlobalContext();
> -  ErrorOr<Binary *> BinaryOrErr = createBinary(Buffer, &Context);
> +  ErrorOr<Binary *> BinaryOrErr =
> +      createBinary(std::move(*BufferOrErr), &Context);
>    if (error(BinaryOrErr.getError(), Filename))
>      return;
> -  Buffer.release();
>    std::unique_ptr<Binary> Bin(BinaryOrErr.get());
>
>    if (Archive *A = dyn_cast<Archive>(Bin.get())) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list