From cb258fa9e950a7261cd85394b7dfa96739ad7a2f Mon Sep 17 00:00:00 2001 From: Ben Langmuir Date: Thu, 27 Feb 2014 17:23:33 +0000 Subject: [PATCH] Split FileEntry name vs. isValid This is a small bit of refactoring in preparation for FileEntry owning the storage for its own name. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202412 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/FileManager.h | 8 ++++++-- lib/Basic/FileManager.cpp | 5 +++-- lib/Frontend/LogDiagnosticPrinter.cpp | 4 ++-- lib/Frontend/TextDiagnostic.cpp | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/include/clang/Basic/FileManager.h b/include/clang/Basic/FileManager.h index 6e345b20b3..bd85318e2f 100644 --- a/include/clang/Basic/FileManager.h +++ b/include/clang/Basic/FileManager.h @@ -66,6 +66,7 @@ class FileEntry { llvm::sys::fs::UniqueID UniqueID; bool IsNamedPipe; bool InPCH; + bool IsValid; // Is this \c FileEntry initialized and valid? /// \brief The open file, if it is owned by the \p FileEntry. mutable OwningPtr File; @@ -77,11 +78,13 @@ class FileEntry { public: FileEntry(llvm::sys::fs::UniqueID UniqueID, bool IsNamedPipe, bool InPCH) - : Name(0), UniqueID(UniqueID), IsNamedPipe(IsNamedPipe), InPCH(InPCH) + : Name(0), UniqueID(UniqueID), IsNamedPipe(IsNamedPipe), InPCH(InPCH), + IsValid(false) {} // Add a default constructor for use with llvm::StringMap FileEntry() - : Name(0), UniqueID(0, 0), IsNamedPipe(false), InPCH(false) + : Name(0), UniqueID(0, 0), IsNamedPipe(false), InPCH(false), + IsValid(false) {} FileEntry(const FileEntry &FE) { @@ -95,6 +98,7 @@ public: } const char *getName() const { return Name; } + bool isValid() const { return IsValid; } off_t getSize() const { return Size; } unsigned getUID() const { return UID; } const llvm::sys::fs::UniqueID &getUniqueID() const { return UniqueID; } diff --git a/lib/Basic/FileManager.cpp b/lib/Basic/FileManager.cpp index efc08aac96..d019686b77 100644 --- a/lib/Basic/FileManager.cpp +++ b/lib/Basic/FileManager.cpp @@ -314,7 +314,7 @@ const FileEntry *FileManager::getFile(StringRef Filename, bool openFile, UniqueRealFiles.getFile(Data.UniqueID, Data.IsNamedPipe, Data.InPCH); NamedFileEnt.setValue(&UFE); - if (UFE.getName()) { // Already have an entry with this inode, return it. + if (UFE.isValid()) { // Already have an entry with this inode, return it. // If the stat process opened the file, close it to avoid a FD leak. if (F) delete F; @@ -331,6 +331,7 @@ const FileEntry *FileManager::getFile(StringRef Filename, bool openFile, UFE.Dir = DirInfo; UFE.UID = NextFileUID++; UFE.File.reset(F); + UFE.IsValid = true; return &UFE; } @@ -380,7 +381,7 @@ FileManager::getVirtualFile(StringRef Filename, off_t Size, UFE->closeFile(); // If we already have an entry with this inode, return it. - if (UFE->getName()) + if (UFE->isValid()) return UFE; } diff --git a/lib/Frontend/LogDiagnosticPrinter.cpp b/lib/Frontend/LogDiagnosticPrinter.cpp index 2189b8658e..6e09a8180c 100644 --- a/lib/Frontend/LogDiagnosticPrinter.cpp +++ b/lib/Frontend/LogDiagnosticPrinter.cpp @@ -130,7 +130,7 @@ void LogDiagnosticPrinter::HandleDiagnostic(DiagnosticsEngine::Level Level, FileID FID = SM.getMainFileID(); if (!FID.isInvalid()) { const FileEntry *FE = SM.getFileEntryForID(FID); - if (FE && FE->getName()) + if (FE && FE->isValid()) MainFilename = FE->getName(); } } @@ -157,7 +157,7 @@ void LogDiagnosticPrinter::HandleDiagnostic(DiagnosticsEngine::Level Level, FileID FID = SM.getFileID(Info.getLocation()); if (!FID.isInvalid()) { const FileEntry *FE = SM.getFileEntryForID(FID); - if (FE && FE->getName()) + if (FE && FE->isValid()) DE.Filename = FE->getName(); } } else { diff --git a/lib/Frontend/TextDiagnostic.cpp b/lib/Frontend/TextDiagnostic.cpp index a2dc9537bc..79f05c6ecd 100644 --- a/lib/Frontend/TextDiagnostic.cpp +++ b/lib/Frontend/TextDiagnostic.cpp @@ -787,7 +787,7 @@ void TextDiagnostic::emitDiagnosticLoc(SourceLocation Loc, PresumedLoc PLoc, FileID FID = SM.getFileID(Loc); if (!FID.isInvalid()) { const FileEntry* FE = SM.getFileEntryForID(FID); - if (FE && FE->getName()) { + if (FE && FE->isValid()) { OS << FE->getName(); if (FE->isInPCH()) OS << " (in PCH)"; -- 2.40.0