[VirtualFileSystem] InMemoryFileSystem::status: Return a Status with the requested...
authorSimon Marchi <simon.marchi@ericsson.com>
Wed, 11 Jul 2018 14:08:17 +0000 (14:08 +0000)
committerSimon Marchi <simon.marchi@ericsson.com>
Wed, 11 Jul 2018 14:08:17 +0000 (14:08 +0000)
commita37ef291c84787329d1d77be66593042577b05ec
tree85f2ba8e0a3779690bf87098a443b841211afbe0
parent1edde95abdeab74cec1b83eaffce87f3afa8b1c4
[VirtualFileSystem] InMemoryFileSystem::status: Return a Status with the requested name

Summary:
InMemoryFileSystem::status behaves differently than
RealFileSystem::status.  The Name contained in the Status returned by
RealFileSystem::status will be the path as requested by the caller,
whereas InMemoryFileSystem::status returns the normalized path.

For example, when requested the status for "../src/first.h",
RealFileSystem returns a Status with "../src/first.h" as the Name.
InMemoryFileSystem returns "/absolute/path/to/src/first.h".

The reason for this change is that I want to make a unit test in the
clangd testsuite (where we use an InMemoryFileSystem) to reproduce a
bug I get with the clangd program (where a RealFileSystem is used).
This difference in behavior "hides" the bug in the unit test version.

In general, I guess it's good if InMemoryFileSystem works as much as
possible like RealFileSystem.

Doing so made the FileEntry::RealPathName value (assigned in
FileManager::getFile) wrong when using the InMemoryFileSystem.  That's
because it assumes that vfs::File::getName will always return the real
path.  I changed to to use FileSystem::getRealPath instead.

Subscribers: ilya-biryukov, ioeric, cfe-commits

Differential Revision: https://reviews.llvm.org/D48903

llvm-svn: 336807
clang/lib/Basic/FileManager.cpp
clang/lib/Basic/VirtualFileSystem.cpp
clang/unittests/Basic/VirtualFileSystemTest.cpp
clang/unittests/Driver/ToolChainTest.cpp