-
Notifications
You must be signed in to change notification settings - Fork 13.9k
[clang] Make deprecations of some FileManager
APIs formal
#110014
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[clang] Make deprecations of some FileManager
APIs formal
#110014
Conversation
@llvm/pr-subscribers-clang-codegen @llvm/pr-subscribers-clang-tools-extra Author: Jan Svoboda (jansvoboda11) ChangesSome Patch is 39.57 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/110014.diff 28 Files Affected:
diff --git a/clang-tools-extra/clang-move/tool/ClangMove.cpp b/clang-tools-extra/clang-move/tool/ClangMove.cpp
index 1560dcaad67793..655ea81ee37d4f 100644
--- a/clang-tools-extra/clang-move/tool/ClangMove.cpp
+++ b/clang-tools-extra/clang-move/tool/ClangMove.cpp
@@ -199,7 +199,7 @@ int main(int argc, const char **argv) {
for (auto I = Files.begin(), E = Files.end(); I != E; ++I) {
OS << " {\n";
OS << " \"FilePath\": \"" << *I << "\",\n";
- const auto Entry = FileMgr.getFile(*I);
+ const auto Entry = FileMgr.getOptionalFileRef(*I);
auto ID = SM.translateFile(*Entry);
std::string Content;
llvm::raw_string_ostream ContentStream(Content);
diff --git a/clang-tools-extra/clangd/SourceCode.cpp b/clang-tools-extra/clangd/SourceCode.cpp
index 3af99b9db056da..780aaa471dc8b6 100644
--- a/clang-tools-extra/clangd/SourceCode.cpp
+++ b/clang-tools-extra/clangd/SourceCode.cpp
@@ -814,8 +814,8 @@ llvm::SmallVector<llvm::StringRef> ancestorNamespaces(llvm::StringRef NS) {
// Checks whether \p FileName is a valid spelling of main file.
bool isMainFile(llvm::StringRef FileName, const SourceManager &SM) {
- auto FE = SM.getFileManager().getFile(FileName);
- return FE && *FE == SM.getFileEntryForID(SM.getMainFileID());
+ auto FE = SM.getFileManager().getOptionalFileRef(FileName);
+ return FE && FE == SM.getFileEntryRefForID(SM.getMainFileID());
}
} // namespace
diff --git a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
index 4bb76cd6ab8304..6ee641caeefe3d 100644
--- a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
+++ b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
@@ -397,10 +397,10 @@ TEST(ParsedASTTest, PatchesAdditionalIncludes) {
auto &FM = SM.getFileManager();
// Copy so that we can use operator[] to get the children.
IncludeStructure Includes = PatchedAST->getIncludeStructure();
- auto MainFE = FM.getFile(testPath("foo.cpp"));
+ auto MainFE = FM.getOptionalFileRef(testPath("foo.cpp"));
ASSERT_TRUE(MainFE);
auto MainID = Includes.getID(*MainFE);
- auto AuxFE = FM.getFile(testPath("sub/aux.h"));
+ auto AuxFE = FM.getOptionalFileRef(testPath("sub/aux.h"));
ASSERT_TRUE(AuxFE);
auto AuxID = Includes.getID(*AuxFE);
EXPECT_THAT(Includes.IncludeChildren[*MainID], Contains(*AuxID));
diff --git a/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp b/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp
index c5fc465ced7a75..84e02e1d0d621b 100644
--- a/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp
+++ b/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp
@@ -60,7 +60,7 @@ class FindHeadersTest : public testing::Test {
llvm::SmallVector<Hinted<Header>> findHeaders(llvm::StringRef FileName) {
return include_cleaner::findHeaders(
AST->sourceManager().translateFileLineCol(
- AST->fileManager().getFile(FileName).get(),
+ *AST->fileManager().getOptionalFileRef(FileName),
/*Line=*/1, /*Col=*/1),
AST->sourceManager(), &PI);
}
diff --git a/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp b/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp
index 0b05c9190cb67f..b5a7b9720903eb 100644
--- a/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp
+++ b/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp
@@ -234,7 +234,7 @@ TEST_F(RecordPPTest, CapturesMacroRefs) {
const auto &SM = AST.sourceManager();
SourceLocation Def = SM.getComposedLoc(
- SM.translateFile(AST.fileManager().getFile("header.h").get()),
+ SM.translateFile(*AST.fileManager().getOptionalFileRef("header.h")),
Header.point("def"));
ASSERT_THAT(Recorded.MacroReferences, Not(IsEmpty()));
Symbol OrigX = Recorded.MacroReferences.front().Target;
@@ -368,29 +368,29 @@ TEST_F(PragmaIncludeTest, IWYUKeep) {
TestAST Processed = build();
auto &FM = Processed.fileManager();
- EXPECT_FALSE(PI.shouldKeep(FM.getFile("normal.h").get()));
- EXPECT_FALSE(PI.shouldKeep(FM.getFile("std/vector").get()));
+ EXPECT_FALSE(PI.shouldKeep(*FM.getOptionalFileRef("normal.h")));
+ EXPECT_FALSE(PI.shouldKeep(*FM.getOptionalFileRef("std/vector")));
// Keep
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep1.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep2.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep3.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep4.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep5.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep6.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("std/map").get()));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep1.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep2.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep3.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep4.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep5.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep6.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("std/map")));
// Exports
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("export1.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("export2.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("export3.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("std/set").get()));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("export1.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("export2.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("export3.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("std/set")));
}
TEST_F(PragmaIncludeTest, AssociatedHeader) {
createEmptyFiles({"foo/main.h", "bar/main.h", "bar/other.h", "std/vector"});
auto IsKeep = [&](llvm::StringRef Name, TestAST &AST) {
- return PI.shouldKeep(AST.fileManager().getFile(Name).get());
+ return PI.shouldKeep(*AST.fileManager().getOptionalFileRef(Name));
};
Inputs.FileName = "main.cc";
@@ -452,19 +452,19 @@ TEST_F(PragmaIncludeTest, IWYUPrivate) {
// IWYU pragma: private
)cpp";
TestAST Processed = build();
- auto PrivateFE = Processed.fileManager().getFile("private.h");
+ auto PrivateFE = Processed.fileManager().getOptionalFileRef("private.h");
assert(PrivateFE);
- EXPECT_TRUE(PI.isPrivate(PrivateFE.get()));
- EXPECT_EQ(PI.getPublic(PrivateFE.get()), "\"public2.h\"");
+ EXPECT_TRUE(PI.isPrivate(*PrivateFE));
+ EXPECT_EQ(PI.getPublic(*PrivateFE), "\"public2.h\"");
- auto PublicFE = Processed.fileManager().getFile("public.h");
+ auto PublicFE = Processed.fileManager().getOptionalFileRef("public.h");
assert(PublicFE);
- EXPECT_EQ(PI.getPublic(PublicFE.get()), ""); // no mapping.
- EXPECT_FALSE(PI.isPrivate(PublicFE.get()));
+ EXPECT_EQ(PI.getPublic(*PublicFE), ""); // no mapping.
+ EXPECT_FALSE(PI.isPrivate(*PublicFE));
- auto Private2FE = Processed.fileManager().getFile("private2.h");
+ auto Private2FE = Processed.fileManager().getOptionalFileRef("private2.h");
assert(Private2FE);
- EXPECT_TRUE(PI.isPrivate(Private2FE.get()));
+ EXPECT_TRUE(PI.isPrivate(*Private2FE));
}
TEST_F(PragmaIncludeTest, IWYUExport) {
@@ -486,13 +486,13 @@ TEST_F(PragmaIncludeTest, IWYUExport) {
const auto &SM = Processed.sourceManager();
auto &FM = Processed.fileManager();
- EXPECT_THAT(PI.getExporters(FM.getFile("private.h").get(), FM),
+ EXPECT_THAT(PI.getExporters(*FM.getOptionalFileRef("private.h"), FM),
testing::UnorderedElementsAre(FileNamed("export1.h"),
FileNamed("export3.h")));
- EXPECT_TRUE(PI.getExporters(FM.getFile("export1.h").get(), FM).empty());
- EXPECT_TRUE(PI.getExporters(FM.getFile("export2.h").get(), FM).empty());
- EXPECT_TRUE(PI.getExporters(FM.getFile("export3.h").get(), FM).empty());
+ EXPECT_TRUE(PI.getExporters(*FM.getOptionalFileRef("export1.h"), FM).empty());
+ EXPECT_TRUE(PI.getExporters(*FM.getOptionalFileRef("export2.h"), FM).empty());
+ EXPECT_TRUE(PI.getExporters(*FM.getOptionalFileRef("export3.h"), FM).empty());
EXPECT_TRUE(
PI.getExporters(SM.getFileEntryForID(SM.getMainFileID()), FM).empty());
}
@@ -548,23 +548,23 @@ TEST_F(PragmaIncludeTest, IWYUExportBlock) {
}
return Result;
};
- auto Exporters = PI.getExporters(FM.getFile("private1.h").get(), FM);
+ auto Exporters = PI.getExporters(*FM.getOptionalFileRef("private1.h"), FM);
EXPECT_THAT(Exporters, testing::UnorderedElementsAre(FileNamed("export1.h"),
FileNamed("normal.h")))
<< GetNames(Exporters);
- Exporters = PI.getExporters(FM.getFile("private2.h").get(), FM);
+ Exporters = PI.getExporters(*FM.getOptionalFileRef("private2.h"), FM);
EXPECT_THAT(Exporters, testing::UnorderedElementsAre(FileNamed("export1.h")))
<< GetNames(Exporters);
- Exporters = PI.getExporters(FM.getFile("private3.h").get(), FM);
+ Exporters = PI.getExporters(*FM.getOptionalFileRef("private3.h"), FM);
EXPECT_THAT(Exporters, testing::UnorderedElementsAre(FileNamed("export1.h")))
<< GetNames(Exporters);
- Exporters = PI.getExporters(FM.getFile("foo.h").get(), FM);
+ Exporters = PI.getExporters(*FM.getOptionalFileRef("foo.h"), FM);
EXPECT_TRUE(Exporters.empty()) << GetNames(Exporters);
- Exporters = PI.getExporters(FM.getFile("bar.h").get(), FM);
+ Exporters = PI.getExporters(*FM.getOptionalFileRef("bar.h"), FM);
EXPECT_TRUE(Exporters.empty()) << GetNames(Exporters);
}
@@ -580,8 +580,8 @@ TEST_F(PragmaIncludeTest, SelfContained) {
Inputs.ExtraFiles["unguarded.h"] = "";
TestAST Processed = build();
auto &FM = Processed.fileManager();
- EXPECT_TRUE(PI.isSelfContained(FM.getFile("guarded.h").get()));
- EXPECT_FALSE(PI.isSelfContained(FM.getFile("unguarded.h").get()));
+ EXPECT_TRUE(PI.isSelfContained(*FM.getOptionalFileRef("guarded.h")));
+ EXPECT_FALSE(PI.isSelfContained(*FM.getOptionalFileRef("unguarded.h")));
}
TEST_F(PragmaIncludeTest, AlwaysKeep) {
@@ -596,8 +596,8 @@ TEST_F(PragmaIncludeTest, AlwaysKeep) {
Inputs.ExtraFiles["usual.h"] = "#pragma once";
TestAST Processed = build();
auto &FM = Processed.fileManager();
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("always_keep.h").get()));
- EXPECT_FALSE(PI.shouldKeep(FM.getFile("usual.h").get()));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("always_keep.h")));
+ EXPECT_FALSE(PI.shouldKeep(*FM.getOptionalFileRef("usual.h")));
}
TEST_F(PragmaIncludeTest, ExportInUnnamedBuffer) {
@@ -653,13 +653,13 @@ TEST_F(PragmaIncludeTest, OutlivesFMAndSM) {
// Now this build gives us a new File&Source Manager.
TestAST Processed = build(/*ResetPragmaIncludes=*/false);
auto &FM = Processed.fileManager();
- auto PrivateFE = FM.getFile("private.h");
+ auto PrivateFE = FM.getOptionalFileRef("private.h");
assert(PrivateFE);
- EXPECT_EQ(PI.getPublic(PrivateFE.get()), "\"public.h\"");
+ EXPECT_EQ(PI.getPublic(*PrivateFE), "\"public.h\"");
- auto Private2FE = FM.getFile("private2.h");
+ auto Private2FE = FM.getOptionalFileRef("private2.h");
assert(Private2FE);
- EXPECT_THAT(PI.getExporters(Private2FE.get(), FM),
+ EXPECT_THAT(PI.getExporters(*Private2FE, FM),
testing::ElementsAre(llvm::cantFail(FM.getFileRef("public.h"))));
}
@@ -676,8 +676,8 @@ TEST_F(PragmaIncludeTest, CanRecordManyTimes) {
TestAST Processed = build();
auto &FM = Processed.fileManager();
- auto PrivateFE = FM.getFile("private.h");
- llvm::StringRef Public = PI.getPublic(PrivateFE.get());
+ auto PrivateFE = FM.getOptionalFileRef("private.h");
+ llvm::StringRef Public = PI.getPublic(*PrivateFE);
EXPECT_EQ(Public, "\"public.h\"");
// This build populates same PI during build, but this time we don't have
diff --git a/clang-tools-extra/unittests/include/common/VirtualFileHelper.h b/clang-tools-extra/unittests/include/common/VirtualFileHelper.h
index 18b98d2796e679..abe10674956949 100644
--- a/clang-tools-extra/unittests/include/common/VirtualFileHelper.h
+++ b/clang-tools-extra/unittests/include/common/VirtualFileHelper.h
@@ -60,7 +60,7 @@ class VirtualFileHelper {
I != E; ++I) {
std::unique_ptr<llvm::MemoryBuffer> Buf =
llvm::MemoryBuffer::getMemBuffer(I->Code);
- const FileEntry *Entry = SM.getFileManager().getVirtualFile(
+ FileEntryRef Entry = SM.getFileManager().getVirtualFileRef(
I->FileName, Buf->getBufferSize(), /*ModificationTime=*/0);
SM.overrideFileContents(Entry, std::move(Buf));
}
diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
index 292e4af1b3b303..a6b17ccb6799d2 100644
--- a/clang/include/clang/Basic/DiagnosticFrontendKinds.td
+++ b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
@@ -109,8 +109,6 @@ def err_fe_expected_clang_command : Error<
"expected a clang compiler command">;
def err_fe_remap_missing_to_file : Error<
"could not remap file '%0' to the contents of file '%1'">, DefaultFatal;
-def err_fe_remap_missing_from_file : Error<
- "could not remap from missing file '%0'">, DefaultFatal;
def err_fe_unable_to_load_pch : Error<
"unable to load PCH file">;
def err_fe_unable_to_load_plugin : Error<
diff --git a/clang/include/clang/Basic/FileManager.h b/clang/include/clang/Basic/FileManager.h
index 74029a91d1a6d0..ce4e8c1fbe16eb 100644
--- a/clang/include/clang/Basic/FileManager.h
+++ b/clang/include/clang/Basic/FileManager.h
@@ -84,7 +84,7 @@ class FileManager : public RefCountedBase<FileManager> {
/// VirtualDirectoryEntries/VirtualFileEntries above.
///
llvm::StringMap<llvm::ErrorOr<DirectoryEntry &>, llvm::BumpPtrAllocator>
- SeenDirEntries;
+ SeenDirEntries;
/// A cache that maps paths to file entries (either real or
/// virtual) we have looked up, or an error that occurred when we looked up
@@ -190,6 +190,8 @@ class FileManager : public RefCountedBase<FileManager> {
///
/// \param CacheFailure If true and the file does not exist, we'll cache
/// the failure to find this file.
+ LLVM_DEPRECATED("Functions returning DirectoryEntry are deprecated.",
+ "getOptionalDirectoryRef()")
llvm::ErrorOr<const DirectoryEntry *>
getDirectory(StringRef DirName, bool CacheFailure = true);
@@ -207,6 +209,8 @@ class FileManager : public RefCountedBase<FileManager> {
///
/// \param CacheFailure If true and the file does not exist, we'll cache
/// the failure to find this file.
+ LLVM_DEPRECATED("Functions returning FileEntry are deprecated.",
+ "getOptionalFileRef()")
llvm::ErrorOr<const FileEntry *>
getFile(StringRef Filename, bool OpenFile = false, bool CacheFailure = true);
@@ -269,6 +273,8 @@ class FileManager : public RefCountedBase<FileManager> {
FileEntryRef getVirtualFileRef(StringRef Filename, off_t Size,
time_t ModificationTime);
+ LLVM_DEPRECATED("Functions returning FileEntry are deprecated.",
+ "getVirtualFileRef()")
const FileEntry *getVirtualFile(StringRef Filename, off_t Size,
time_t ModificationTime);
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp
index bba97e289da2e1..60175f1ccb342a 100644
--- a/clang/lib/AST/ASTImporter.cpp
+++ b/clang/lib/AST/ASTImporter.cpp
@@ -10020,8 +10020,8 @@ Expected<FileID> ASTImporter::Import(FileID FromID, bool IsBuiltin) {
ToIncludeLocOrFakeLoc = ToSM.getLocForStartOfFile(ToSM.getMainFileID());
if (Cache->OrigEntry && Cache->OrigEntry->getDir()) {
- // FIXME: We probably want to use getVirtualFile(), so we don't hit the
- // disk again
+ // FIXME: We probably want to use getVirtualFileRef(), so we don't hit
+ // the disk again
// FIXME: We definitely want to re-use the existing MemoryBuffer, rather
// than mmap the files several times.
auto Entry =
diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp
index 883333f0924ddb..c9f9b688d0d8a2 100644
--- a/clang/lib/CodeGen/CodeGenAction.cpp
+++ b/clang/lib/CodeGen/CodeGenAction.cpp
@@ -586,9 +586,9 @@ const FullSourceLoc BackendConsumer::getBestLocationFromDebugLoc(
if (D.isLocationAvailable()) {
D.getLocation(Filename, Line, Column);
if (Line > 0) {
- auto FE = FileMgr.getFile(Filename);
+ auto FE = FileMgr.getOptionalFileRef(Filename);
if (!FE)
- FE = FileMgr.getFile(D.getAbsolutePath());
+ FE = FileMgr.getOptionalFileRef(D.getAbsolutePath());
if (FE) {
// If -gcolumn-info was not used, Column will be 0. This upsets the
// source manager, so pass 1 if Column is not set.
diff --git a/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp b/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp
index 75c2dec22400b9..6f42b36bd36a4b 100644
--- a/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp
+++ b/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp
@@ -217,8 +217,8 @@ struct LocationFileChecker {
SmallVector<std::pair<SmallString<32>, bool>> &KnownFiles)
: CI(CI), KnownFiles(KnownFiles), ExternalFileEntries() {
for (const auto &KnownFile : KnownFiles)
- if (auto FileEntry = CI.getFileManager().getFile(KnownFile.first))
- KnownFileEntries.insert(*FileEntry);
+ if (auto FE = CI.getFileManager().getOptionalFileRef(KnownFile.first))
+ KnownFileEntries.insert(*FE);
}
private:
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 93836ec5402faa..bffff0d27af3ab 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -2395,7 +2395,7 @@ void ASTUnit::TranslateStoredDiagnostics(
// Rebuild the StoredDiagnostic.
if (SD.Filename.empty())
continue;
- auto FE = FileMgr.getFile(SD.Filename);
+ auto FE = FileMgr.getOptionalFileRef(SD.Filename);
if (!FE)
continue;
SourceLocation FileLoc;
diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp
index 5f2a9637e3ea46..0089786379d3ea 100644
--- a/clang/lib/Frontend/CompilerInstance.cpp
+++ b/clang/lib/Frontend/CompilerInstance.cpp
@@ -427,12 +427,8 @@ static void InitializeFileRemapping(DiagnosticsEngine &Diags,
}
// Create the file entry for the file that we're mapping from.
- const FileEntry *FromFile =
- FileMgr.getVirtualFile(RF.first, ToFile->getSize(), 0);
- if (!FromFile) {
- Diags.Report(diag::err_fe_remap_missing_from_file) << RF.first;
- continue;
- }
+ FileEntryRef FromFile =
+ FileMgr.getVirtualFileRef(RF.first, ToFile->getSize(), 0);
// Override the contents of the "from" file with the contents of
// the "to" file.
@@ -1925,8 +1921,8 @@ ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(
M = HS.lookupModule(ModuleName, ImportLoc, true, !IsInclusionDirective);
// Check whether M refers to the file in the prebuilt module path.
- if (M && M->getASTFile())
- if (auto ModuleFile = FileMgr->getFile(ModuleFilename))
+ if (M && M->getASTFile() && M->getASTFile())
+ if (auto ModuleFile = FileMgr->getOptionalFileRef(ModuleFilename))
if (*ModuleFile == M->getASTFile())
return M;
diff --git a/clang/lib/Frontend/Rewrite/FrontendActions.cpp b/clang/lib/Frontend/Rewrite/FrontendActions.cpp
index cf5a9437e89e6c..6e1f949f543a51 100644
--- a/clang/lib/Frontend/Rewrite/FrontendActions.cpp
+++ b/clang/lib/Frontend/Rewrite/FrontendActions.cpp
@@ -213,7 +213,7 @@ class RewriteIncludesAction::RewriteImportsListener : public ASTReaderListener {
void visitModuleFile(StringRef Filename,
serialization::ModuleKind Kind) override {
- auto File = CI.getFileManager().getFile(Filename);
+ auto File = CI.getFileManager().getOptionalFileRef(Filename);
assert(File && "missing file for loaded module?");
// Only rewrite each module file once.
diff --git a/clang/lib/InstallAPI/Frontend.cpp b/clang/lib/InstallAPI/Frontend.cpp
index 04d06f46d26520..2ebe72bf021cf9 100644
--- a/clang/lib/InstallAPI/Frontend.cpp
+++ b/clang/lib/InstallAPI/Frontend.cpp
@@ -107,7 +107,7 @@ InstallAPIContext::findAndRecordFile(const FileEntry *FE,
}
void InstallAPIContext::a...
[truncated]
|
@llvm/pr-subscribers-clang-modules Author: Jan Svoboda (jansvoboda11) ChangesSome Patch is 39.57 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/110014.diff 28 Files Affected:
diff --git a/clang-tools-extra/clang-move/tool/ClangMove.cpp b/clang-tools-extra/clang-move/tool/ClangMove.cpp
index 1560dcaad67793..655ea81ee37d4f 100644
--- a/clang-tools-extra/clang-move/tool/ClangMove.cpp
+++ b/clang-tools-extra/clang-move/tool/ClangMove.cpp
@@ -199,7 +199,7 @@ int main(int argc, const char **argv) {
for (auto I = Files.begin(), E = Files.end(); I != E; ++I) {
OS << " {\n";
OS << " \"FilePath\": \"" << *I << "\",\n";
- const auto Entry = FileMgr.getFile(*I);
+ const auto Entry = FileMgr.getOptionalFileRef(*I);
auto ID = SM.translateFile(*Entry);
std::string Content;
llvm::raw_string_ostream ContentStream(Content);
diff --git a/clang-tools-extra/clangd/SourceCode.cpp b/clang-tools-extra/clangd/SourceCode.cpp
index 3af99b9db056da..780aaa471dc8b6 100644
--- a/clang-tools-extra/clangd/SourceCode.cpp
+++ b/clang-tools-extra/clangd/SourceCode.cpp
@@ -814,8 +814,8 @@ llvm::SmallVector<llvm::StringRef> ancestorNamespaces(llvm::StringRef NS) {
// Checks whether \p FileName is a valid spelling of main file.
bool isMainFile(llvm::StringRef FileName, const SourceManager &SM) {
- auto FE = SM.getFileManager().getFile(FileName);
- return FE && *FE == SM.getFileEntryForID(SM.getMainFileID());
+ auto FE = SM.getFileManager().getOptionalFileRef(FileName);
+ return FE && FE == SM.getFileEntryRefForID(SM.getMainFileID());
}
} // namespace
diff --git a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
index 4bb76cd6ab8304..6ee641caeefe3d 100644
--- a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
+++ b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
@@ -397,10 +397,10 @@ TEST(ParsedASTTest, PatchesAdditionalIncludes) {
auto &FM = SM.getFileManager();
// Copy so that we can use operator[] to get the children.
IncludeStructure Includes = PatchedAST->getIncludeStructure();
- auto MainFE = FM.getFile(testPath("foo.cpp"));
+ auto MainFE = FM.getOptionalFileRef(testPath("foo.cpp"));
ASSERT_TRUE(MainFE);
auto MainID = Includes.getID(*MainFE);
- auto AuxFE = FM.getFile(testPath("sub/aux.h"));
+ auto AuxFE = FM.getOptionalFileRef(testPath("sub/aux.h"));
ASSERT_TRUE(AuxFE);
auto AuxID = Includes.getID(*AuxFE);
EXPECT_THAT(Includes.IncludeChildren[*MainID], Contains(*AuxID));
diff --git a/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp b/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp
index c5fc465ced7a75..84e02e1d0d621b 100644
--- a/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp
+++ b/clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp
@@ -60,7 +60,7 @@ class FindHeadersTest : public testing::Test {
llvm::SmallVector<Hinted<Header>> findHeaders(llvm::StringRef FileName) {
return include_cleaner::findHeaders(
AST->sourceManager().translateFileLineCol(
- AST->fileManager().getFile(FileName).get(),
+ *AST->fileManager().getOptionalFileRef(FileName),
/*Line=*/1, /*Col=*/1),
AST->sourceManager(), &PI);
}
diff --git a/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp b/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp
index 0b05c9190cb67f..b5a7b9720903eb 100644
--- a/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp
+++ b/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp
@@ -234,7 +234,7 @@ TEST_F(RecordPPTest, CapturesMacroRefs) {
const auto &SM = AST.sourceManager();
SourceLocation Def = SM.getComposedLoc(
- SM.translateFile(AST.fileManager().getFile("header.h").get()),
+ SM.translateFile(*AST.fileManager().getOptionalFileRef("header.h")),
Header.point("def"));
ASSERT_THAT(Recorded.MacroReferences, Not(IsEmpty()));
Symbol OrigX = Recorded.MacroReferences.front().Target;
@@ -368,29 +368,29 @@ TEST_F(PragmaIncludeTest, IWYUKeep) {
TestAST Processed = build();
auto &FM = Processed.fileManager();
- EXPECT_FALSE(PI.shouldKeep(FM.getFile("normal.h").get()));
- EXPECT_FALSE(PI.shouldKeep(FM.getFile("std/vector").get()));
+ EXPECT_FALSE(PI.shouldKeep(*FM.getOptionalFileRef("normal.h")));
+ EXPECT_FALSE(PI.shouldKeep(*FM.getOptionalFileRef("std/vector")));
// Keep
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep1.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep2.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep3.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep4.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep5.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("keep6.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("std/map").get()));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep1.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep2.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep3.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep4.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep5.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("keep6.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("std/map")));
// Exports
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("export1.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("export2.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("export3.h").get()));
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("std/set").get()));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("export1.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("export2.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("export3.h")));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("std/set")));
}
TEST_F(PragmaIncludeTest, AssociatedHeader) {
createEmptyFiles({"foo/main.h", "bar/main.h", "bar/other.h", "std/vector"});
auto IsKeep = [&](llvm::StringRef Name, TestAST &AST) {
- return PI.shouldKeep(AST.fileManager().getFile(Name).get());
+ return PI.shouldKeep(*AST.fileManager().getOptionalFileRef(Name));
};
Inputs.FileName = "main.cc";
@@ -452,19 +452,19 @@ TEST_F(PragmaIncludeTest, IWYUPrivate) {
// IWYU pragma: private
)cpp";
TestAST Processed = build();
- auto PrivateFE = Processed.fileManager().getFile("private.h");
+ auto PrivateFE = Processed.fileManager().getOptionalFileRef("private.h");
assert(PrivateFE);
- EXPECT_TRUE(PI.isPrivate(PrivateFE.get()));
- EXPECT_EQ(PI.getPublic(PrivateFE.get()), "\"public2.h\"");
+ EXPECT_TRUE(PI.isPrivate(*PrivateFE));
+ EXPECT_EQ(PI.getPublic(*PrivateFE), "\"public2.h\"");
- auto PublicFE = Processed.fileManager().getFile("public.h");
+ auto PublicFE = Processed.fileManager().getOptionalFileRef("public.h");
assert(PublicFE);
- EXPECT_EQ(PI.getPublic(PublicFE.get()), ""); // no mapping.
- EXPECT_FALSE(PI.isPrivate(PublicFE.get()));
+ EXPECT_EQ(PI.getPublic(*PublicFE), ""); // no mapping.
+ EXPECT_FALSE(PI.isPrivate(*PublicFE));
- auto Private2FE = Processed.fileManager().getFile("private2.h");
+ auto Private2FE = Processed.fileManager().getOptionalFileRef("private2.h");
assert(Private2FE);
- EXPECT_TRUE(PI.isPrivate(Private2FE.get()));
+ EXPECT_TRUE(PI.isPrivate(*Private2FE));
}
TEST_F(PragmaIncludeTest, IWYUExport) {
@@ -486,13 +486,13 @@ TEST_F(PragmaIncludeTest, IWYUExport) {
const auto &SM = Processed.sourceManager();
auto &FM = Processed.fileManager();
- EXPECT_THAT(PI.getExporters(FM.getFile("private.h").get(), FM),
+ EXPECT_THAT(PI.getExporters(*FM.getOptionalFileRef("private.h"), FM),
testing::UnorderedElementsAre(FileNamed("export1.h"),
FileNamed("export3.h")));
- EXPECT_TRUE(PI.getExporters(FM.getFile("export1.h").get(), FM).empty());
- EXPECT_TRUE(PI.getExporters(FM.getFile("export2.h").get(), FM).empty());
- EXPECT_TRUE(PI.getExporters(FM.getFile("export3.h").get(), FM).empty());
+ EXPECT_TRUE(PI.getExporters(*FM.getOptionalFileRef("export1.h"), FM).empty());
+ EXPECT_TRUE(PI.getExporters(*FM.getOptionalFileRef("export2.h"), FM).empty());
+ EXPECT_TRUE(PI.getExporters(*FM.getOptionalFileRef("export3.h"), FM).empty());
EXPECT_TRUE(
PI.getExporters(SM.getFileEntryForID(SM.getMainFileID()), FM).empty());
}
@@ -548,23 +548,23 @@ TEST_F(PragmaIncludeTest, IWYUExportBlock) {
}
return Result;
};
- auto Exporters = PI.getExporters(FM.getFile("private1.h").get(), FM);
+ auto Exporters = PI.getExporters(*FM.getOptionalFileRef("private1.h"), FM);
EXPECT_THAT(Exporters, testing::UnorderedElementsAre(FileNamed("export1.h"),
FileNamed("normal.h")))
<< GetNames(Exporters);
- Exporters = PI.getExporters(FM.getFile("private2.h").get(), FM);
+ Exporters = PI.getExporters(*FM.getOptionalFileRef("private2.h"), FM);
EXPECT_THAT(Exporters, testing::UnorderedElementsAre(FileNamed("export1.h")))
<< GetNames(Exporters);
- Exporters = PI.getExporters(FM.getFile("private3.h").get(), FM);
+ Exporters = PI.getExporters(*FM.getOptionalFileRef("private3.h"), FM);
EXPECT_THAT(Exporters, testing::UnorderedElementsAre(FileNamed("export1.h")))
<< GetNames(Exporters);
- Exporters = PI.getExporters(FM.getFile("foo.h").get(), FM);
+ Exporters = PI.getExporters(*FM.getOptionalFileRef("foo.h"), FM);
EXPECT_TRUE(Exporters.empty()) << GetNames(Exporters);
- Exporters = PI.getExporters(FM.getFile("bar.h").get(), FM);
+ Exporters = PI.getExporters(*FM.getOptionalFileRef("bar.h"), FM);
EXPECT_TRUE(Exporters.empty()) << GetNames(Exporters);
}
@@ -580,8 +580,8 @@ TEST_F(PragmaIncludeTest, SelfContained) {
Inputs.ExtraFiles["unguarded.h"] = "";
TestAST Processed = build();
auto &FM = Processed.fileManager();
- EXPECT_TRUE(PI.isSelfContained(FM.getFile("guarded.h").get()));
- EXPECT_FALSE(PI.isSelfContained(FM.getFile("unguarded.h").get()));
+ EXPECT_TRUE(PI.isSelfContained(*FM.getOptionalFileRef("guarded.h")));
+ EXPECT_FALSE(PI.isSelfContained(*FM.getOptionalFileRef("unguarded.h")));
}
TEST_F(PragmaIncludeTest, AlwaysKeep) {
@@ -596,8 +596,8 @@ TEST_F(PragmaIncludeTest, AlwaysKeep) {
Inputs.ExtraFiles["usual.h"] = "#pragma once";
TestAST Processed = build();
auto &FM = Processed.fileManager();
- EXPECT_TRUE(PI.shouldKeep(FM.getFile("always_keep.h").get()));
- EXPECT_FALSE(PI.shouldKeep(FM.getFile("usual.h").get()));
+ EXPECT_TRUE(PI.shouldKeep(*FM.getOptionalFileRef("always_keep.h")));
+ EXPECT_FALSE(PI.shouldKeep(*FM.getOptionalFileRef("usual.h")));
}
TEST_F(PragmaIncludeTest, ExportInUnnamedBuffer) {
@@ -653,13 +653,13 @@ TEST_F(PragmaIncludeTest, OutlivesFMAndSM) {
// Now this build gives us a new File&Source Manager.
TestAST Processed = build(/*ResetPragmaIncludes=*/false);
auto &FM = Processed.fileManager();
- auto PrivateFE = FM.getFile("private.h");
+ auto PrivateFE = FM.getOptionalFileRef("private.h");
assert(PrivateFE);
- EXPECT_EQ(PI.getPublic(PrivateFE.get()), "\"public.h\"");
+ EXPECT_EQ(PI.getPublic(*PrivateFE), "\"public.h\"");
- auto Private2FE = FM.getFile("private2.h");
+ auto Private2FE = FM.getOptionalFileRef("private2.h");
assert(Private2FE);
- EXPECT_THAT(PI.getExporters(Private2FE.get(), FM),
+ EXPECT_THAT(PI.getExporters(*Private2FE, FM),
testing::ElementsAre(llvm::cantFail(FM.getFileRef("public.h"))));
}
@@ -676,8 +676,8 @@ TEST_F(PragmaIncludeTest, CanRecordManyTimes) {
TestAST Processed = build();
auto &FM = Processed.fileManager();
- auto PrivateFE = FM.getFile("private.h");
- llvm::StringRef Public = PI.getPublic(PrivateFE.get());
+ auto PrivateFE = FM.getOptionalFileRef("private.h");
+ llvm::StringRef Public = PI.getPublic(*PrivateFE);
EXPECT_EQ(Public, "\"public.h\"");
// This build populates same PI during build, but this time we don't have
diff --git a/clang-tools-extra/unittests/include/common/VirtualFileHelper.h b/clang-tools-extra/unittests/include/common/VirtualFileHelper.h
index 18b98d2796e679..abe10674956949 100644
--- a/clang-tools-extra/unittests/include/common/VirtualFileHelper.h
+++ b/clang-tools-extra/unittests/include/common/VirtualFileHelper.h
@@ -60,7 +60,7 @@ class VirtualFileHelper {
I != E; ++I) {
std::unique_ptr<llvm::MemoryBuffer> Buf =
llvm::MemoryBuffer::getMemBuffer(I->Code);
- const FileEntry *Entry = SM.getFileManager().getVirtualFile(
+ FileEntryRef Entry = SM.getFileManager().getVirtualFileRef(
I->FileName, Buf->getBufferSize(), /*ModificationTime=*/0);
SM.overrideFileContents(Entry, std::move(Buf));
}
diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
index 292e4af1b3b303..a6b17ccb6799d2 100644
--- a/clang/include/clang/Basic/DiagnosticFrontendKinds.td
+++ b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
@@ -109,8 +109,6 @@ def err_fe_expected_clang_command : Error<
"expected a clang compiler command">;
def err_fe_remap_missing_to_file : Error<
"could not remap file '%0' to the contents of file '%1'">, DefaultFatal;
-def err_fe_remap_missing_from_file : Error<
- "could not remap from missing file '%0'">, DefaultFatal;
def err_fe_unable_to_load_pch : Error<
"unable to load PCH file">;
def err_fe_unable_to_load_plugin : Error<
diff --git a/clang/include/clang/Basic/FileManager.h b/clang/include/clang/Basic/FileManager.h
index 74029a91d1a6d0..ce4e8c1fbe16eb 100644
--- a/clang/include/clang/Basic/FileManager.h
+++ b/clang/include/clang/Basic/FileManager.h
@@ -84,7 +84,7 @@ class FileManager : public RefCountedBase<FileManager> {
/// VirtualDirectoryEntries/VirtualFileEntries above.
///
llvm::StringMap<llvm::ErrorOr<DirectoryEntry &>, llvm::BumpPtrAllocator>
- SeenDirEntries;
+ SeenDirEntries;
/// A cache that maps paths to file entries (either real or
/// virtual) we have looked up, or an error that occurred when we looked up
@@ -190,6 +190,8 @@ class FileManager : public RefCountedBase<FileManager> {
///
/// \param CacheFailure If true and the file does not exist, we'll cache
/// the failure to find this file.
+ LLVM_DEPRECATED("Functions returning DirectoryEntry are deprecated.",
+ "getOptionalDirectoryRef()")
llvm::ErrorOr<const DirectoryEntry *>
getDirectory(StringRef DirName, bool CacheFailure = true);
@@ -207,6 +209,8 @@ class FileManager : public RefCountedBase<FileManager> {
///
/// \param CacheFailure If true and the file does not exist, we'll cache
/// the failure to find this file.
+ LLVM_DEPRECATED("Functions returning FileEntry are deprecated.",
+ "getOptionalFileRef()")
llvm::ErrorOr<const FileEntry *>
getFile(StringRef Filename, bool OpenFile = false, bool CacheFailure = true);
@@ -269,6 +273,8 @@ class FileManager : public RefCountedBase<FileManager> {
FileEntryRef getVirtualFileRef(StringRef Filename, off_t Size,
time_t ModificationTime);
+ LLVM_DEPRECATED("Functions returning FileEntry are deprecated.",
+ "getVirtualFileRef()")
const FileEntry *getVirtualFile(StringRef Filename, off_t Size,
time_t ModificationTime);
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp
index bba97e289da2e1..60175f1ccb342a 100644
--- a/clang/lib/AST/ASTImporter.cpp
+++ b/clang/lib/AST/ASTImporter.cpp
@@ -10020,8 +10020,8 @@ Expected<FileID> ASTImporter::Import(FileID FromID, bool IsBuiltin) {
ToIncludeLocOrFakeLoc = ToSM.getLocForStartOfFile(ToSM.getMainFileID());
if (Cache->OrigEntry && Cache->OrigEntry->getDir()) {
- // FIXME: We probably want to use getVirtualFile(), so we don't hit the
- // disk again
+ // FIXME: We probably want to use getVirtualFileRef(), so we don't hit
+ // the disk again
// FIXME: We definitely want to re-use the existing MemoryBuffer, rather
// than mmap the files several times.
auto Entry =
diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp
index 883333f0924ddb..c9f9b688d0d8a2 100644
--- a/clang/lib/CodeGen/CodeGenAction.cpp
+++ b/clang/lib/CodeGen/CodeGenAction.cpp
@@ -586,9 +586,9 @@ const FullSourceLoc BackendConsumer::getBestLocationFromDebugLoc(
if (D.isLocationAvailable()) {
D.getLocation(Filename, Line, Column);
if (Line > 0) {
- auto FE = FileMgr.getFile(Filename);
+ auto FE = FileMgr.getOptionalFileRef(Filename);
if (!FE)
- FE = FileMgr.getFile(D.getAbsolutePath());
+ FE = FileMgr.getOptionalFileRef(D.getAbsolutePath());
if (FE) {
// If -gcolumn-info was not used, Column will be 0. This upsets the
// source manager, so pass 1 if Column is not set.
diff --git a/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp b/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp
index 75c2dec22400b9..6f42b36bd36a4b 100644
--- a/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp
+++ b/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp
@@ -217,8 +217,8 @@ struct LocationFileChecker {
SmallVector<std::pair<SmallString<32>, bool>> &KnownFiles)
: CI(CI), KnownFiles(KnownFiles), ExternalFileEntries() {
for (const auto &KnownFile : KnownFiles)
- if (auto FileEntry = CI.getFileManager().getFile(KnownFile.first))
- KnownFileEntries.insert(*FileEntry);
+ if (auto FE = CI.getFileManager().getOptionalFileRef(KnownFile.first))
+ KnownFileEntries.insert(*FE);
}
private:
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 93836ec5402faa..bffff0d27af3ab 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -2395,7 +2395,7 @@ void ASTUnit::TranslateStoredDiagnostics(
// Rebuild the StoredDiagnostic.
if (SD.Filename.empty())
continue;
- auto FE = FileMgr.getFile(SD.Filename);
+ auto FE = FileMgr.getOptionalFileRef(SD.Filename);
if (!FE)
continue;
SourceLocation FileLoc;
diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp
index 5f2a9637e3ea46..0089786379d3ea 100644
--- a/clang/lib/Frontend/CompilerInstance.cpp
+++ b/clang/lib/Frontend/CompilerInstance.cpp
@@ -427,12 +427,8 @@ static void InitializeFileRemapping(DiagnosticsEngine &Diags,
}
// Create the file entry for the file that we're mapping from.
- const FileEntry *FromFile =
- FileMgr.getVirtualFile(RF.first, ToFile->getSize(), 0);
- if (!FromFile) {
- Diags.Report(diag::err_fe_remap_missing_from_file) << RF.first;
- continue;
- }
+ FileEntryRef FromFile =
+ FileMgr.getVirtualFileRef(RF.first, ToFile->getSize(), 0);
// Override the contents of the "from" file with the contents of
// the "to" file.
@@ -1925,8 +1921,8 @@ ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(
M = HS.lookupModule(ModuleName, ImportLoc, true, !IsInclusionDirective);
// Check whether M refers to the file in the prebuilt module path.
- if (M && M->getASTFile())
- if (auto ModuleFile = FileMgr->getFile(ModuleFilename))
+ if (M && M->getASTFile() && M->getASTFile())
+ if (auto ModuleFile = FileMgr->getOptionalFileRef(ModuleFilename))
if (*ModuleFile == M->getASTFile())
return M;
diff --git a/clang/lib/Frontend/Rewrite/FrontendActions.cpp b/clang/lib/Frontend/Rewrite/FrontendActions.cpp
index cf5a9437e89e6c..6e1f949f543a51 100644
--- a/clang/lib/Frontend/Rewrite/FrontendActions.cpp
+++ b/clang/lib/Frontend/Rewrite/FrontendActions.cpp
@@ -213,7 +213,7 @@ class RewriteIncludesAction::RewriteImportsListener : public ASTReaderListener {
void visitModuleFile(StringRef Filename,
serialization::ModuleKind Kind) override {
- auto File = CI.getFileManager().getFile(Filename);
+ auto File = CI.getFileManager().getOptionalFileRef(Filename);
assert(File && "missing file for loaded module?");
// Only rewrite each module file once.
diff --git a/clang/lib/InstallAPI/Frontend.cpp b/clang/lib/InstallAPI/Frontend.cpp
index 04d06f46d26520..2ebe72bf021cf9 100644
--- a/clang/lib/InstallAPI/Frontend.cpp
+++ b/clang/lib/InstallAPI/Frontend.cpp
@@ -107,7 +107,7 @@ InstallAPIContext::findAndRecordFile(const FileEntry *FE,
}
void InstallAPIContext::a...
[truncated]
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for cleaning this up!
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/144/builds/7970 Here is the relevant piece of the build log for the reference
|
Some
FileManager
APIs still return{File,Directory}Entry
instead of the preferred{File,Directory}EntryRef
. These are documented to be deprecated, but don't have the attribute that warns on their usage. This PR marks them as such withLLVM_DEPRECATED()
and replaces their usage with the recommended counterparts. NFCI.