Skip to content

Commit

Permalink
[clang][deps] Normalize ignored filenames in minimizing file system
Browse files Browse the repository at this point in the history
This patch normalizes filenames in `DependencyScanningWorkerFilesystem` so that lookup of ignored files works correctly on Windows (where `/` and `\` are equivalent).

Reviewed By: dexonsmith

Differential Revision: https://reviews.llvm.org/D106064
  • Loading branch information
jansvoboda11 committed Jul 20, 2021
1 parent 98687aa commit 63fd109
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,12 @@ class DependencyScanningWorkerFilesystem : public llvm::vfs::ProxyFileSystem {
llvm::ErrorOr<std::unique_ptr<llvm::vfs::File>>
openFileForRead(const Twine &Path) override;

/// The set of files that should not be minimized.
llvm::StringSet<> IgnoredFiles;
void clearIgnoredFiles() { IgnoredFiles.clear(); }
void ignoreFile(StringRef Filename);

private:
bool shouldIgnoreFile(StringRef Filename);

void setCachedEntry(StringRef Filename, const CachedFileSystemEntry *Entry) {
bool IsInserted = Cache.try_emplace(Filename, Entry).second;
(void)IsInserted;
Expand All @@ -179,6 +181,8 @@ class DependencyScanningWorkerFilesystem : public llvm::vfs::ProxyFileSystem {
/// excluded conditional directive skip mappings that are used by the
/// currently active preprocessor.
ExcludedPreprocessorDirectiveSkipMapping *PPSkipMappings;
/// The set of files that should not be minimized.
llvm::StringSet<> IgnoredFiles;
};

} // end namespace dependencies
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,19 @@ static bool shouldCacheStatFailures(StringRef Filename) {
return shouldMinimize(Filename); // Only cache stat failures on source files.
}

void DependencyScanningWorkerFilesystem::ignoreFile(StringRef RawFilename) {
llvm::SmallString<256> Filename;
llvm::sys::path::native(RawFilename, Filename);
IgnoredFiles.insert(Filename);
}

bool DependencyScanningWorkerFilesystem::shouldIgnoreFile(
StringRef RawFilename) {
llvm::SmallString<256> Filename;
llvm::sys::path::native(RawFilename, Filename);
return IgnoredFiles.contains(Filename);
}

llvm::ErrorOr<const CachedFileSystemEntry *>
DependencyScanningWorkerFilesystem::getOrCreateFileSystemEntry(
const StringRef Filename) {
Expand All @@ -159,7 +172,7 @@ DependencyScanningWorkerFilesystem::getOrCreateFileSystemEntry(
// FIXME: Handle PCM/PCH files.
// FIXME: Handle module map files.

bool KeepOriginalSource = IgnoredFiles.count(Filename) ||
bool KeepOriginalSource = shouldIgnoreFile(Filename) ||
!shouldMinimize(Filename);
DependencyScanningFilesystemSharedCache::SharedFileSystemEntry
&SharedCacheEntry = SharedCache.get(Filename);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,11 @@ class DependencyScanningAction : public tooling::ToolAction {
// Add any filenames that were explicity passed in the build settings and
// that might be opened, as we want to ensure we don't run source
// minimization on them.
DepFS->IgnoredFiles.clear();
DepFS->clearIgnoredFiles();
for (const auto &Entry : CI.getHeaderSearchOpts().UserEntries)
DepFS->IgnoredFiles.insert(Entry.Path);
DepFS->ignoreFile(Entry.Path);
for (const auto &Entry : CI.getHeaderSearchOpts().VFSOverlayFiles)
DepFS->IgnoredFiles.insert(Entry);
DepFS->ignoreFile(Entry);

// Support for virtual file system overlays on top of the caching
// filesystem.
Expand Down

0 comments on commit 63fd109

Please sign in to comment.