Author: Jan Svoboda Date: 2021-07-20T11:31:31+02:00 New Revision: 63fd109d3aa6db48e38e1c78f6084ad257f2c37d
URL: https://github.com/llvm/llvm-project/commit/63fd109d3aa6db48e38e1c78f6084ad257f2c37d DIFF: https://github.com/llvm/llvm-project/commit/63fd109d3aa6db48e38e1c78f6084ad257f2c37d.diff LOG: [clang][deps] Normalize ignored filenames in minimizing file system 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 Added: Modified: clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h index 82dc0b8fdb579..b213f388dadc0 100644 --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h @@ -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; @@ -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 diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp index 1c10b7d727a58..88b835e159f3c 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp @@ -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) { @@ -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); diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp index cd3463aa13e60..54581043c4f73 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -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. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits