[PATCH] D97850: Fix PCM read from ModuleCache for ext4 filesystem
Raphael Isemann via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 4 05:04:58 PST 2021
teemperor added a comment.
If I understand this correctly, then the inode caching logic in FileManager isn't just breaking PCMs but all file operations:
TEST_F(FileManagerTest, InodeReuse) {
{
std::ofstream myfile;
myfile.open("a.cpp");
myfile << "content\n";
}
llvm::ErrorOr<const FileEntry*> fe1 = manager.getFile("a.cpp");
EXPECT_TRUE(fe1);
const FileEntry *f1 = *fe1;
remove("a.cpp");
{
std::ofstream myfile;
myfile.open("b.cpp");
myfile << "different content\n";
}
llvm::ErrorOr<const FileEntry*> fe2 = manager.getFile("b.cpp");
EXPECT_TRUE(fe2);
const FileEntry *f2 = *fe2;
EXPECT_NE(f2->getSize(), f1->getSize());
EXPECT_NE(f2->getUniqueID().getFile(), f1->getUniqueID().getFile());
}
This fails consistently for me when running in an empty ext4 directory with:
Expected: (f2->getSize()) != (f1->getSize()), actual: 8 vs 8
Expected: (f2->getUniqueID().getFile()) != (f1->getUniqueID().getFile()), actual: 57855544 vs 57855544
I guess this wasn't considered a valid use case for the normal `#include` logic within Clang (which I believe is the primary beneficiary of this cache and doesn't really care about a changing file system). But with PCMs and Clang REPLs this is probably causing some strange bugs.
Anyway, I don't think I know the FileManager code well enough to come up with a real fix (beside just removing the inode cache).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D97850/new/
https://reviews.llvm.org/D97850
More information about the cfe-commits
mailing list