diff options
author | Max Moroz <mmoroz@chromium.org> | 2018-04-04 19:47:25 +0000 |
---|---|---|
committer | Max Moroz <mmoroz@chromium.org> | 2018-04-04 19:47:25 +0000 |
commit | e097567006e234209ef2d821f3a58158358fd370 (patch) | |
tree | f4df4377097df7e6c344f509800a5f68984fc52f /clang/unittests/Basic/VirtualFileSystemTest.cpp | |
parent | e6cf0a3d9f056074247e8f75fda041684f896557 (diff) | |
download | llvm-e097567006e234209ef2d821f3a58158358fd370.zip llvm-e097567006e234209ef2d821f3a58158358fd370.tar.gz llvm-e097567006e234209ef2d821f3a58158358fd370.tar.bz2 |
Fixes errors with FS iterators caused by https://reviews.llvm.org/D44960
Summary:
In https://reviews.llvm.org/D44960, file status check is executed every
time a real file system directory iterator is constructed or
incremented, and emits an error code. This change list fixes the errors
in VirtualFileSystem caused by https://reviews.llvm.org/D44960.
Patch by Yuke Liao (@liaoyuke).
Reviewers: vsk, pcc, zturner, liaoyuke
Reviewed By: vsk
Subscribers: mgrang, cfe-commits
Differential Revision: https://reviews.llvm.org/D45178
llvm-svn: 329223
Diffstat (limited to 'clang/unittests/Basic/VirtualFileSystemTest.cpp')
-rw-r--r-- | clang/unittests/Basic/VirtualFileSystemTest.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/clang/unittests/Basic/VirtualFileSystemTest.cpp b/clang/unittests/Basic/VirtualFileSystemTest.cpp index 13c246e..fe2e776 100644 --- a/clang/unittests/Basic/VirtualFileSystemTest.cpp +++ b/clang/unittests/Basic/VirtualFileSystemTest.cpp @@ -442,16 +442,17 @@ TEST(VirtualFileSystemTest, BrokenSymlinkRealFSRecursiveIteration) { ScopedDir _dd(TestDirectory + "/d/d"); ScopedDir _ddd(TestDirectory + "/d/d/d"); ScopedLink _e("no_such_file", TestDirectory + "/e"); - std::vector<StringRef> Expected = {_b, _bb, _d, _dd, _ddd}; - std::vector<std::string> Contents; + std::vector<StringRef> ExpectedBrokenSymlinks = {_a, _ba, _bc, _c, _e}; + std::vector<StringRef> ExpectedNonBrokenSymlinks = {_b, _bb, _d, _dd, _ddd}; + std::vector<std::string> VisitedBrokenSymlinks; + std::vector<std::string> VisitedNonBrokenSymlinks; std::error_code EC; for (vfs::recursive_directory_iterator I(*FS, Twine(TestDirectory), EC), E; I != E; I.increment(EC)) { - // Skip broken symlinks. auto EC2 = std::make_error_code(std::errc::no_such_file_or_directory); if (EC == EC2) { - EC.clear(); + VisitedBrokenSymlinks.push_back(I->getName()); continue; } // For bot debugging. @@ -467,13 +468,20 @@ TEST(VirtualFileSystemTest, BrokenSymlinkRealFSRecursiveIteration) { << "EC message: " << EC2.message() << "\n"; } ASSERT_FALSE(EC); - Contents.push_back(I->getName()); + VisitedNonBrokenSymlinks.push_back(I->getName()); } - // Check sorted contents. - llvm::sort(Contents.begin(), Contents.end()); - EXPECT_EQ(Expected.size(), Contents.size()); - EXPECT_TRUE(std::equal(Contents.begin(), Contents.end(), Expected.begin())); + // Check visited file names. + std::sort(VisitedBrokenSymlinks.begin(), VisitedBrokenSymlinks.end()); + std::sort(VisitedNonBrokenSymlinks.begin(), VisitedNonBrokenSymlinks.end()); + EXPECT_EQ(ExpectedBrokenSymlinks.size(), VisitedBrokenSymlinks.size()); + EXPECT_TRUE(std::equal(VisitedBrokenSymlinks.begin(), + VisitedBrokenSymlinks.end(), + ExpectedBrokenSymlinks.begin())); + EXPECT_EQ(ExpectedNonBrokenSymlinks.size(), VisitedNonBrokenSymlinks.size()); + EXPECT_TRUE(std::equal(VisitedNonBrokenSymlinks.begin(), + VisitedNonBrokenSymlinks.end(), + ExpectedNonBrokenSymlinks.begin())); } #endif |