diff options
Diffstat (limited to 'clang/lib/Frontend/ModuleDependencyCollector.cpp')
-rw-r--r-- | clang/lib/Frontend/ModuleDependencyCollector.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/clang/lib/Frontend/ModuleDependencyCollector.cpp b/clang/lib/Frontend/ModuleDependencyCollector.cpp index 7e19ed3d56e5..b4b312bc93b9 100644 --- a/clang/lib/Frontend/ModuleDependencyCollector.cpp +++ b/clang/lib/Frontend/ModuleDependencyCollector.cpp @@ -26,13 +26,19 @@ namespace { /// Private implementations for ModuleDependencyCollector class ModuleDependencyListener : public ASTReaderListener { ModuleDependencyCollector &Collector; + FileManager &FileMgr; public: - ModuleDependencyListener(ModuleDependencyCollector &Collector) - : Collector(Collector) {} + ModuleDependencyListener(ModuleDependencyCollector &Collector, + FileManager &FileMgr) + : Collector(Collector), FileMgr(FileMgr) {} bool needsInputFileVisitation() override { return true; } bool needsSystemInputFileVisitation() override { return true; } bool visitInputFile(StringRef Filename, bool IsSystem, bool IsOverridden, bool IsExplicitModule) override { + // 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(); Collector.addFile(Filename); return true; } @@ -48,7 +54,7 @@ struct ModuleDependencyPPCallbacks : public PPCallbacks { void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok, StringRef FileName, bool IsAngled, CharSourceRange FilenameRange, - Optional<FileEntryRef> File, StringRef SearchPath, + OptionalFileEntryRef File, StringRef SearchPath, StringRef RelativePath, const Module *Imported, SrcMgr::CharacteristicKind FileType) override { if (!File) @@ -99,7 +105,8 @@ struct ModuleDependencyMMCallbacks : public ModuleMapCallbacks { } void ModuleDependencyCollector::attachToASTReader(ASTReader &R) { - R.addListener(std::make_unique<ModuleDependencyListener>(*this)); + R.addListener( + std::make_unique<ModuleDependencyListener>(*this, R.getFileManager())); } void ModuleDependencyCollector::attachToPreprocessor(Preprocessor &PP) { |