From: Ted Kremenek Date: Wed, 28 Jan 2009 20:49:33 +0000 (+0000) Subject: Enhance PTHManager::Create() to take an optional Diagnostic* argument that can be... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8a6aec620dbec1f292fe4116c0373ac81ab90234;p=clang Enhance PTHManager::Create() to take an optional Diagnostic* argument that can be used to report issues such as a missing PTH file. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63231 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/clang.cpp b/Driver/clang.cpp index bc548e4e8b..fba2df13a3 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -1154,7 +1154,7 @@ public: // Use PTH? if (!TokenCache.empty()) - PTHMgr.reset(PTHManager::Create(TokenCache)); + PTHMgr.reset(PTHManager::Create(TokenCache, &Diags)); // Create the Preprocessor. llvm::OwningPtr PP(new Preprocessor(Diags, LangInfo, Target, diff --git a/include/clang/Lex/PTHManager.h b/include/clang/Lex/PTHManager.h index b77cda1f0b..22343e208c 100644 --- a/include/clang/Lex/PTHManager.h +++ b/include/clang/Lex/PTHManager.h @@ -29,6 +29,7 @@ namespace clang { class FileEntry; class PTHLexer; +class Diagnostic; class PTHManager : public IdentifierInfoLookup { friend class PTHLexer; @@ -107,7 +108,7 @@ public: /// Create - This method creates PTHManager objects. The 'file' argument /// is the name of the PTH file. This method returns NULL upon failure. - static PTHManager *Create(const std::string& file); + static PTHManager *Create(const std::string& file, Diagnostic* Diags = 0); void setPreprocessor(Preprocessor *pp) { PP = pp; } diff --git a/lib/Lex/PTHLexer.cpp b/lib/Lex/PTHLexer.cpp index f9f2b21061..36f509cba6 100644 --- a/lib/Lex/PTHLexer.cpp +++ b/lib/Lex/PTHLexer.cpp @@ -390,13 +390,20 @@ PTHManager::~PTHManager() { free(PerIDCache); } -PTHManager* PTHManager::Create(const std::string& file) { +PTHManager* PTHManager::Create(const std::string& file, Diagnostic* Diags) { // Memory map the PTH file. llvm::OwningPtr File(llvm::MemoryBuffer::getFile(file.c_str())); - if (!File) + if (!File) { + if (Diags) { + unsigned DiagID = Diags->getCustomDiagID(Diagnostic::Note, + "PTH file %0 could not be read"); + Diags->Report(FullSourceLoc(), DiagID) << file; + } + return 0; + } // Get the buffer ranges and check if there are at least three 32-bit // words at the end of the file.