diff --git a/clang-tools-extra/clang-move/Move.cpp b/clang-tools-extra/clang-move/Move.cpp index e237a8ee1ebf1..905f1f456f4ac 100644 --- a/clang-tools-extra/clang-move/Move.cpp +++ b/clang-tools-extra/clang-move/Move.cpp @@ -92,7 +92,7 @@ std::string MakeAbsolutePath(const SourceManager &SM, StringRef Path) { << '\n'; // Handle symbolic link path cases. // We are trying to get the real file path of the symlink. - auto Dir = SM.getFileManager().getDirectory( + auto Dir = SM.getFileManager().getOptionalDirectoryRef( llvm::sys::path::parent_path(AbsolutePath.str())); if (Dir) { StringRef DirName = SM.getFileManager().getCanonicalName(*Dir); diff --git a/clang-tools-extra/clangd/SourceCode.cpp b/clang-tools-extra/clangd/SourceCode.cpp index c460ae307f114..474570cb6459f 100644 --- a/clang-tools-extra/clangd/SourceCode.cpp +++ b/clang-tools-extra/clangd/SourceCode.cpp @@ -537,7 +537,7 @@ std::optional getCanonicalPath(const FileEntryRef F, // // The file path of Symbol is "/project/src/foo.h" instead of // "/tmp/build/foo.h" - if (auto Dir = FileMgr.getDirectory( + if (auto Dir = FileMgr.getOptionalDirectoryRef( llvm::sys::path::parent_path(FilePath))) { llvm::SmallString<128> RealPath; llvm::StringRef DirName = FileMgr.getCanonicalName(*Dir); diff --git a/clang/include/clang/Basic/FileManager.h b/clang/include/clang/Basic/FileManager.h index 84d569363a4a0..502b69c3b41ba 100644 --- a/clang/include/clang/Basic/FileManager.h +++ b/clang/include/clang/Basic/FileManager.h @@ -320,7 +320,7 @@ class FileManager : public RefCountedBase { /// This is a very expensive operation, despite its results being cached, /// and should only be used when the physical layout of the file system is /// required, which is (almost) never. - StringRef getCanonicalName(const DirectoryEntry *Dir); + StringRef getCanonicalName(DirectoryEntryRef Dir); /// Retrieve the canonical name for a given file. /// diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp index 0f544f0215ac1..f92c1aeb21124 100644 --- a/clang/lib/Basic/FileManager.cpp +++ b/clang/lib/Basic/FileManager.cpp @@ -631,16 +631,15 @@ void FileManager::GetUniqueIDMapping( UIDToFiles[VFE->getUID()] = VFE; } -StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) { - llvm::DenseMap::iterator Known - = CanonicalNames.find(Dir); +StringRef FileManager::getCanonicalName(DirectoryEntryRef Dir) { + auto Known = CanonicalNames.find(Dir); if (Known != CanonicalNames.end()) return Known->second; - StringRef CanonicalName(Dir->getName()); + StringRef CanonicalName(Dir.getName()); SmallString<4096> CanonicalNameBuf; - if (!FS->getRealPath(Dir->getName(), CanonicalNameBuf)) + if (!FS->getRealPath(Dir.getName(), CanonicalNameBuf)) CanonicalName = CanonicalNameBuf.str().copy(CanonicalNameStorage); CanonicalNames.insert({Dir, CanonicalName}); diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 56329410c87da..cf546c4b3f9fe 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -1319,9 +1319,9 @@ ModuleMap::canonicalizeModuleMapPath(SmallVectorImpl &Path) { } FileManager &FM = SourceMgr.getFileManager(); - auto DirEntry = FM.getDirectory(Dir.empty() ? "." : Dir); + auto DirEntry = FM.getDirectoryRef(Dir.empty() ? "." : Dir); if (!DirEntry) - return DirEntry.getError(); + return llvm::errorToErrorCode(DirEntry.takeError()); // Canonicalize the directory. StringRef CanonicalDir = FM.getCanonicalName(*DirEntry);