diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h @@ -153,10 +153,12 @@ llvm::ErrorOr> 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; @@ -179,6 +181,8 @@ /// 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 diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp @@ -149,6 +149,19 @@ 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 DependencyScanningWorkerFilesystem::getOrCreateFileSystemEntry( const StringRef Filename) { @@ -159,7 +172,7 @@ // 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); diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -128,11 +128,11 @@ // 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.