[clang] 63fd109 - [clang][deps] Normalize ignored filenames in minimizing file system
Jan Svoboda via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 20 02:32:02 PDT 2021
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.
More information about the cfe-commits
mailing list