r215853 - Convert a few ownership comments with std::unique_ptr.

David Blaikie dblaikie at gmail.com
Sun Aug 17 16:15:02 PDT 2014


On Sun, Aug 17, 2014 at 3:12 PM, Rafael Espindola
<rafael.espindola at gmail.com> wrote:
> Author: rafael
> Date: Sun Aug 17 17:12:58 2014
> New Revision: 215853
>
> URL: http://llvm.org/viewvc/llvm-project?rev=215853&view=rev
> Log:
> Convert a few ownership comments with std::unique_ptr.
>
> Modified:
>     cfe/trunk/include/clang/Basic/VirtualFileSystem.h
>     cfe/trunk/lib/Basic/VirtualFileSystem.cpp
>     cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>     cfe/trunk/unittests/Basic/VirtualFileSystemTest.cpp
>
> Modified: cfe/trunk/include/clang/Basic/VirtualFileSystem.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/VirtualFileSystem.h?rev=215853&r1=215852&r2=215853&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/VirtualFileSystem.h (original)
> +++ cfe/trunk/include/clang/Basic/VirtualFileSystem.h Sun Aug 17 17:12:58 2014
> @@ -250,10 +250,8 @@ llvm::sys::fs::UniqueID getNextVirtualUn
>
>  /// \brief Gets a \p FileSystem for a virtual file system described in YAML
>  /// format.
> -///
> -/// Takes ownership of \p Buffer.
>  IntrusiveRefCntPtr<FileSystem>
> -getVFSFromYAML(llvm::MemoryBuffer *Buffer,
> +getVFSFromYAML(std::unique_ptr<llvm::MemoryBuffer> Buffer,
>                 llvm::SourceMgr::DiagHandlerTy DiagHandler,
>                 void *DiagContext = nullptr,
>                 IntrusiveRefCntPtr<FileSystem> ExternalFS = getRealFileSystem());
>
> Modified: cfe/trunk/lib/Basic/VirtualFileSystem.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/VirtualFileSystem.cpp?rev=215853&r1=215852&r2=215853&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Basic/VirtualFileSystem.cpp (original)
> +++ cfe/trunk/lib/Basic/VirtualFileSystem.cpp Sun Aug 17 17:12:58 2014
> @@ -514,9 +514,7 @@ public:
>
>    /// \brief Parses \p Buffer, which is expected to be in YAML format and
>    /// returns a virtual file system representing its contents.
> -  ///
> -  /// Takes ownership of \p Buffer.
> -  static VFSFromYAML *create(MemoryBuffer *Buffer,
> +  static VFSFromYAML *create(std::unique_ptr<MemoryBuffer> Buffer,
>                               SourceMgr::DiagHandlerTy DiagHandler,
>                               void *DiagContext,
>                               IntrusiveRefCntPtr<FileSystem> ExternalFS);
> @@ -865,13 +863,13 @@ DirectoryEntry::~DirectoryEntry() { llvm
>
>  VFSFromYAML::~VFSFromYAML() { llvm::DeleteContainerPointers(Roots); }
>
> -VFSFromYAML *VFSFromYAML::create(MemoryBuffer *Buffer,
> +VFSFromYAML *VFSFromYAML::create(std::unique_ptr<MemoryBuffer> Buffer,
>                                   SourceMgr::DiagHandlerTy DiagHandler,
>                                   void *DiagContext,
>                                   IntrusiveRefCntPtr<FileSystem> ExternalFS) {
>
>    SourceMgr SM;
> -  yaml::Stream Stream(Buffer, SM);
> +  yaml::Stream Stream(Buffer.release(), SM);
>
>    SM.setDiagHandler(DiagHandler, DiagContext);
>    yaml::document_iterator DI = Stream.begin();
> @@ -993,10 +991,11 @@ VFSFromYAML::openFileForRead(const Twine
>  }
>
>  IntrusiveRefCntPtr<FileSystem>
> -vfs::getVFSFromYAML(MemoryBuffer *Buffer, SourceMgr::DiagHandlerTy DiagHandler,
> -                    void *DiagContext,
> +vfs::getVFSFromYAML(std::unique_ptr<MemoryBuffer> Buffer,
> +                    SourceMgr::DiagHandlerTy DiagHandler, void *DiagContext,
>                      IntrusiveRefCntPtr<FileSystem> ExternalFS) {
> -  return VFSFromYAML::create(Buffer, DiagHandler, DiagContext, ExternalFS);
> +  return VFSFromYAML::create(std::move(Buffer), DiagHandler, DiagContext,
> +                             ExternalFS);
>  }
>
>  UniqueID vfs::getNextVirtualUniqueID() {
>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=215853&r1=215852&r2=215853&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Sun Aug 17 17:12:58 2014
> @@ -2034,7 +2034,7 @@ createVFSFromCompilerInvocation(const Co
>      }
>
>      IntrusiveRefCntPtr<vfs::FileSystem> FS =
> -        vfs::getVFSFromYAML(Buffer->release(), /*DiagHandler*/ nullptr);
> +        vfs::getVFSFromYAML(std::move(Buffer.get()), /*DiagHandler*/ nullptr);
>      if (!FS.get()) {
>        Diags.Report(diag::err_invalid_vfs_overlay) << File;
>        return IntrusiveRefCntPtr<vfs::FileSystem>();
>
> Modified: cfe/trunk/unittests/Basic/VirtualFileSystemTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Basic/VirtualFileSystemTest.cpp?rev=215853&r1=215852&r2=215853&view=diff
> ==============================================================================
> --- cfe/trunk/unittests/Basic/VirtualFileSystemTest.cpp (original)
> +++ cfe/trunk/unittests/Basic/VirtualFileSystemTest.cpp Sun Aug 17 17:12:58 2014
> @@ -540,7 +540,8 @@ public:
>    getFromYAMLRawString(StringRef Content,
>                         IntrusiveRefCntPtr<vfs::FileSystem> ExternalFS) {
>      MemoryBuffer *Buffer = MemoryBuffer::getMemBuffer(Content);
> -    return getVFSFromYAML(Buffer, CountingDiagHandler, this, ExternalFS);
> +    return getVFSFromYAML(std::unique_ptr<MemoryBuffer>(Buffer),

Directly constructing temporary smart pointers is an eye-brow raising
thing (though not applicable to LLVM - it's not exception safe). I'd
probably be inclined to take ownership on the line before (with the
result of getMemBuffer) into a named unique_ptr, then move into the
call got getVFSFromYAML instead.

(& perhaps one day we'll have MemoryBuffer's factories return by
unique_ptr... - or we'll get rid of its polymorphism/ownership stuff
and just have value-passed MemoryBufferRefs... one day)

> +                          CountingDiagHandler, this, ExternalFS);
>    }
>
>    IntrusiveRefCntPtr<vfs::FileSystem> getFromYAMLString(
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list