Never mind. My llvm and clang trees were out of sync.
Diego. On Mon, Oct 5, 2015 at 11:15 AM, Diego Novillo <dnovi...@google.com> wrote: > > > On Mon, Oct 5, 2015 at 9:55 AM, Benjamin Kramer via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: d0k >> Date: Mon Oct 5 08:55:20 2015 >> New Revision: 249316 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=249316&view=rev >> Log: >> [VFS] Add working directories to every virtual file system. >> >> For RealFileSystem this is getcwd()/chdir(), the synthetic file systems >> can >> make up one for themselves. OverlayFileSystem now synchronizes the working >> directories when a new FS is added to the overlay or the overlay working >> directory is set. This allows purely artificial file systems that have >> zero >> ties to the underlying disks. >> >> Differential Revision: http://reviews.llvm.org/D13430 >> >> Modified: >> cfe/trunk/include/clang/Basic/VirtualFileSystem.h >> cfe/trunk/lib/Basic/VirtualFileSystem.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=249316&r1=249315&r2=249316&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/Basic/VirtualFileSystem.h (original) >> +++ cfe/trunk/include/clang/Basic/VirtualFileSystem.h Mon Oct 5 08:55:20 >> 2015 >> @@ -199,6 +199,25 @@ public: >> /// \note The 'end' iterator is directory_iterator(). >> virtual directory_iterator dir_begin(const Twine &Dir, >> std::error_code &EC) = 0; >> + >> + /// Set the working directory. This will affect all following >> operations on >> + /// this file system and may propagate down for nested file systems. >> + virtual std::error_code setCurrentWorkingDirectory(const Twine &Path) >> = 0; >> + /// Get the working directory of this file system. >> + virtual llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const >> = 0; >> + >> + /// Make \a Path an absolute path. >> + /// >> + /// Makes \a Path absolute using the current directory if it is not >> already. >> + /// An empty \a Path will result in the current directory. >> + /// >> + /// /absolute/path => /absolute/path >> + /// relative/../path => <current-directory>/relative/../path >> + /// >> + /// \param Path A path that is modified to be an absolute path. >> + /// \returns success if \a path has been made absolute, otherwise a >> + /// platform-specific error_code. >> + std::error_code makeAbsolute(SmallVectorImpl<char> &Path) const; >> }; >> >> /// \brief Gets an \p vfs::FileSystem for the 'real' file system, as >> seen by >> @@ -230,6 +249,8 @@ public: >> llvm::ErrorOr<std::unique_ptr<File>> >> openFileForRead(const Twine &Path) override; >> directory_iterator dir_begin(const Twine &Dir, std::error_code &EC) >> override; >> + llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const override; >> + std::error_code setCurrentWorkingDirectory(const Twine &Path) override; >> >> typedef FileSystemList::reverse_iterator iterator; >> >> @@ -248,6 +269,7 @@ class InMemoryDirectory; >> /// An in-memory file system. >> class InMemoryFileSystem : public FileSystem { >> std::unique_ptr<detail::InMemoryDirectory> Root; >> + std::string WorkingDirectory; >> >> public: >> InMemoryFileSystem(); >> @@ -260,6 +282,13 @@ public: >> llvm::ErrorOr<std::unique_ptr<File>> >> openFileForRead(const Twine &Path) override; >> directory_iterator dir_begin(const Twine &Dir, std::error_code &EC) >> override; >> + llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const override >> { >> + return WorkingDirectory; >> + } >> + std::error_code setCurrentWorkingDirectory(const Twine &Path) override >> { >> + WorkingDirectory = Path.str(); >> + return std::error_code(); >> + } >> }; >> >> /// \brief Get a globally unique ID for a virtual file or directory. >> >> Modified: cfe/trunk/lib/Basic/VirtualFileSystem.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/VirtualFileSystem.cpp?rev=249316&r1=249315&r2=249316&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Basic/VirtualFileSystem.cpp (original) >> +++ cfe/trunk/lib/Basic/VirtualFileSystem.cpp Mon Oct 5 08:55:20 2015 >> @@ -89,6 +89,14 @@ FileSystem::getBufferForFile(const llvm: >> return (*F)->getBuffer(Name, FileSize, RequiresNullTerminator, >> IsVolatile); >> } >> >> +std::error_code FileSystem::makeAbsolute(SmallVectorImpl<char> &Path) >> const { >> + auto WorkingDir = getCurrentWorkingDirectory(); >> + if (!WorkingDir) >> + return WorkingDir.getError(); >> + >> + return llvm::sys::fs::make_absolute(WorkingDir.get(), Path); >> +} >> > > Ben, > > This is causing: > > tools/clang/lib/Basic/VirtualFileSystem.cpp:105:57: error: too many > arguments to function call, expected single argument 'path', have 2 > arguments > return llvm::sys::fs::make_absolute(WorkingDir.get(), Path); > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~ > [...]/llvm/llvm/include/llvm/Support/FileSystem.h:280:1: note: > 'make_absolute' declared here > std::error_code make_absolute(SmallVectorImpl<char> &path); > ^ > 1 error generated. > > Not sure which of the two parameters needs to be taken out. > > > Thanks. Diego. >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits