[cfe-dev] [Unit Tests] BasicTests filesystem test failures
David Greene via cfe-dev
cfe-dev at lists.llvm.org
Mon Oct 1 19:32:30 PDT 2018
These tests are broken on X86-64 and AArch64 SLES 12:
[ FAILED ] 2 tests, listed below:
[ FAILED ] VirtualFileSystemTest.BrokenSymlinkRealFSIteration
[ FAILED ] VirtualFileSystemTest.BrokenSymlinkRealFSRecursiveIteration
/clang/unittests/Basic/VirtualFileSystemTest.cpp:443: Failure
Value of: I->path() == _b
Actual: false
Expected: true
/clang/unittests/Basic/VirtualFileSystemTest.cpp:443: Failure
Value of: I->path() == _b
Actual: false
Expected: true
[ FAILED ] VirtualFileSystemTest.BrokenSymlinkRealFSIteration (1 ms)
[ RUN ] VirtualFileSystemTest.BasicRealFSRecursiveIteration
[ OK ] VirtualFileSystemTest.BasicRealFSRecursiveIteration (0 ms)
[ RUN ] VirtualFileSystemTest.BrokenSymlinkRealFSRecursiveIteration
/clang/unittests/Basic/VirtualFileSystemTest.cpp:534: Failure
Expected: ExpectedBrokenSymlinks.size()
Which is: 5
To be equal to: VisitedBrokenSymlinks.size()
Which is: 0
/clang/unittests/Basic/VirtualFileSystemTest.cpp:538: Failure
Expected: ExpectedNonBrokenSymlinks.size()
Which is: 5
To be equal to: VisitedNonBrokenSymlinks.size()
Which is: 10
/clang/unittests/Basic/VirtualFileSystemTest.cpp:541: Failure
Value of: std::equal(VisitedNonBrokenSymlinks.begin(), VisitedNonBrokenSymlinks.end(), ExpectedNonBrokenSymlinks.begin())
Actual: false
Expected: true
[ FAILED ] VirtualFileSystemTest.BrokenSymlinkRealFSRecursiveIteration (1 ms)
The first failures (path inequality) are caused by the directory iterators not
skipping broken symlinks. I did not dive deeply into the other failures as I
assume they show the same issue.
This commit appears to have caused the regression:
commit 446fa15e649709fc8bde40ed422d1e4794ac9559
Author: Sam McCall <sam.mccall at gmail.com>
Date: Fri Sep 14 12:47:38 2018 +0000
[VFS] vfs::directory_iterator yields path and file type instead of full Status
Summary:
Most callers I can find are using only `getName()`. Type is used by the
recursive iterator.
Now we don't have to call stat() on every listed file (on most platforms).
Exceptions are e.g. Solaris where readdir() doesn't include type information.
On those platforms we'll still stat() - see D51918.
The result is significantly faster (stat() can be slow).
My motivation: this may allow us to improve clang IO on large TUs with long
include search paths. Caching readdir() results may allow us to skip many stat()
and open() operations on nonexistent files.
Reviewers: bkramer
Subscribers: fedor.sergeev, cfe-commits
Differential Revision: https://reviews.llvm.org/D51921
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@342232 91177308-0d34-0410-b5e6-96231b3b80d8
I am not well versed enough in the VFS layer to propose a fix, but I am
happy to help test patches.
-David
More information about the cfe-dev
mailing list