Enhance PTHManager::Create() to take an optional Diagnostic* argument that can be used to report issues such as a missing PTH file.

llvm-svn: 63231
This commit is contained in:
Ted Kremenek 2009-01-28 20:49:33 +00:00
parent 5241832d1d
commit 3b0589e4b4
3 changed files with 12 additions and 4 deletions

View File

@ -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<Preprocessor> PP(new Preprocessor(Diags, LangInfo, Target,

View File

@ -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; }

View File

@ -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<llvm::MemoryBuffer>
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.