Author: Duncan P. N. Exon Smith Date: 2020-10-22T21:32:28-04:00 New Revision: 168db92465c504974274302a6a1a5d4a1580ccfe
URL: https://github.com/llvm/llvm-project/commit/168db92465c504974274302a6a1a5d4a1580ccfe DIFF: https://github.com/llvm/llvm-project/commit/168db92465c504974274302a6a1a5d4a1580ccfe.diff LOG: SourceManager: Change SourceManager::isMainFile to take a FileEntry, NFC `SourceManager::isMainFile` does not use the filename, so it doesn't need the full `FileEntryRef`; in fact, it's misleading to take the name because that makes it look relevant. Simplify the API, and in the process remove some calls to `FileEntryRef::FileEntryRef` in the unit tests (which were blocking making that private to `SourceManager`). Differential Revision: https://reviews.llvm.org/D89507 Added: Modified: clang/include/clang/Basic/SourceManager.h clang/lib/Basic/SourceManager.cpp clang/lib/Lex/PPDirectives.cpp clang/unittests/Basic/SourceManagerTest.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Basic/SourceManager.h b/clang/include/clang/Basic/SourceManager.h index 57f8e9d365ad..93eee503a8e5 100644 --- a/clang/include/clang/Basic/SourceManager.h +++ b/clang/include/clang/Basic/SourceManager.h @@ -814,7 +814,7 @@ class SourceManager : public RefCountedBase<SourceManager> { /// Returns true when the given FileEntry corresponds to the main file. /// /// The main file should be set prior to calling this function. - bool isMainFile(FileEntryRef SourceFile); + bool isMainFile(const FileEntry &SourceFile); /// Set the file ID for the precompiled preamble. void setPreambleFileID(FileID Preamble) { diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index a3e4e02cbb5f..c91ef41979bc 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -345,12 +345,11 @@ void SourceManager::clearIDTables() { createExpansionLoc(SourceLocation(), SourceLocation(), SourceLocation(), 1); } -bool SourceManager::isMainFile(FileEntryRef SourceFile) { +bool SourceManager::isMainFile(const FileEntry &SourceFile) { assert(MainFileID.isValid() && "expected initialized SourceManager"); - auto FE = getFileEntryRefForID(MainFileID); - if (!FE) - return false; - return FE->getUID() == SourceFile.getUID(); + if (auto *FE = getFileEntryForID(MainFileID)) + return FE->getUID() == SourceFile.getUID(); + return false; } void SourceManager::initializeForReplay(const SourceManager &Old) { diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index 62724d467eac..d6b03d85913d 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -2061,7 +2061,7 @@ Preprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport( // some directives (e.g. #endif of a header guard) will never be seen. // Since this will lead to confusing errors, avoid the inclusion. if (Action == Enter && File && PreambleConditionalStack.isRecording() && - SourceMgr.isMainFile(*File)) { + SourceMgr.isMainFile(File->getFileEntry())) { Diag(FilenameTok.getLocation(), diag::err_pp_including_mainfile_in_preamble); return {ImportAction::None}; diff --git a/clang/unittests/Basic/SourceManagerTest.cpp b/clang/unittests/Basic/SourceManagerTest.cpp index 5fd7607f76d7..dadfcc94ac0d 100644 --- a/clang/unittests/Basic/SourceManagerTest.cpp +++ b/clang/unittests/Basic/SourceManagerTest.cpp @@ -509,10 +509,9 @@ TEST_F(SourceManagerTest, isMainFile) { FileID MainFileID = SourceMgr.getOrCreateFileID(SourceFile, SrcMgr::C_User); SourceMgr.setMainFileID(MainFileID); - EXPECT_TRUE(SourceMgr.isMainFile(FileEntryRef("mainFile.cpp", *SourceFile))); - EXPECT_TRUE( - SourceMgr.isMainFile(FileEntryRef("anotherName.cpp", *SourceFile))); - EXPECT_FALSE(SourceMgr.isMainFile(FileEntryRef("mainFile.cpp", *SecondFile))); + EXPECT_TRUE(SourceMgr.isMainFile(*SourceFile)); + EXPECT_TRUE(SourceMgr.isMainFile(*SourceFile)); + EXPECT_FALSE(SourceMgr.isMainFile(*SecondFile)); } #endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits