diff options
Diffstat (limited to 'clang/lib/Frontend/DependencyFile.cpp')
-rw-r--r-- | clang/lib/Frontend/DependencyFile.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Frontend/DependencyFile.cpp b/clang/lib/Frontend/DependencyFile.cpp index 6a0a718..e19ccdf 100644 --- a/clang/lib/Frontend/DependencyFile.cpp +++ b/clang/lib/Frontend/DependencyFile.cpp @@ -108,7 +108,9 @@ struct DepCollectorMMCallbacks : public ModuleMapCallbacks { struct DepCollectorASTListener : public ASTReaderListener { DependencyCollector &DepCollector; - DepCollectorASTListener(DependencyCollector &L) : DepCollector(L) { } + FileManager &FileMgr; + DepCollectorASTListener(DependencyCollector &L, FileManager &FileMgr) + : DepCollector(L), FileMgr(FileMgr) {} bool needsInputFileVisitation() override { return true; } bool needsSystemInputFileVisitation() override { return DepCollector.needSystemDependencies(); @@ -124,6 +126,11 @@ struct DepCollectorASTListener : public ASTReaderListener { if (IsOverridden || IsExplicitModule) return true; + // Run this through the FileManager in order to respect 'use-external-name' + // in case we have a VFS overlay. + if (auto FE = FileMgr.getOptionalFileRef(Filename)) + Filename = FE->getName(); + DepCollector.maybeAddDependency(Filename, /*FromModule*/true, IsSystem, /*IsModuleFile*/false, /*IsMissing*/false); return true; @@ -176,7 +183,8 @@ void DependencyCollector::attachToPreprocessor(Preprocessor &PP) { std::make_unique<DepCollectorMMCallbacks>(*this)); } void DependencyCollector::attachToASTReader(ASTReader &R) { - R.addListener(std::make_unique<DepCollectorASTListener>(*this)); + R.addListener( + std::make_unique<DepCollectorASTListener>(*this, R.getFileManager())); } DependencyFileGenerator::DependencyFileGenerator( |