================ @@ -108,6 +108,31 @@ DependencyScanningFilesystemSharedCache::getShardForUID( return CacheShards[Hash % NumShards]; } +void DependencyScanningFilesystemSharedCache::diagnoseNegativeStatCachedPaths( + llvm::raw_ostream &OS, llvm::vfs::FileSystem &UnderlyingFS) const { + // Iterate through all shards and look for cached stat errors. + for (unsigned i = 0; i < NumShards; i++) { + const CacheShard &Shard = CacheShards[i]; + std::lock_guard<std::mutex> LockGuard(Shard.CacheLock); + for (const auto &[Path, CachedPair] : Shard.CacheByFilename) { + const CachedFileSystemEntry *Entry = CachedPair.first; + + if (Entry->getError()) { + // Only examine cached errors. + llvm::ErrorOr<llvm::vfs::Status> Stat = UnderlyingFS.status(Path); + if (Stat) { + // This is the case where we have cached the non-existence + // of the file at Path, but the file is created but the cache is + // not invalidated. Report diagnostics. + OS << Path << " did not exist when it was first searched " + << "but was created later. This may have led to a build failure " + "due to missing files.\n"; ---------------- qiongsiwu wrote:
Good point. This logic is revised so we output a list of them per API call to reduce duplication. https://github.com/llvm/llvm-project/pull/135703 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits