diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-04-25 22:23:56 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-04-25 22:23:56 +0000 |
commit | daa41f59e43c7e1b3962a85a13ec77f220f83ae9 (patch) | |
tree | c33488ffce2f4c2c6fcfe03d8adbb417ee9c773c /clang/lib/Serialization/ASTReader.cpp | |
parent | e553e404676e1ccdb862d4bb2c2041227df7bf03 (diff) | |
download | bcm5719-llvm-daa41f59e43c7e1b3962a85a13ec77f220f83ae9.tar.gz bcm5719-llvm-daa41f59e43c7e1b3962a85a13ec77f220f83ae9.zip |
Fix a crash when ASTReader emits diagnostic when another one is in flight. Fixes rdar//9334563.
llvm-svn: 130162
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index addd73ba356..03d9a05f3e3 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -957,8 +957,16 @@ bool ASTReader::ReadDeclContextStorage(llvm::BitstreamCursor &Cursor, return false; } -void ASTReader::Error(const char *Msg) { - Diag(diag::err_fe_pch_malformed) << Msg; +void ASTReader::Error(llvm::StringRef Msg) { + Error(diag::err_fe_pch_malformed, Msg); +} + +void ASTReader::Error(unsigned DiagID, + llvm::StringRef Arg1, llvm::StringRef Arg2) { + if (Diags.isDiagnosticInFlight()) + Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2); + else + Diag(DiagID) << Arg1 << Arg2; } /// \brief Tell the AST listener about the predefines buffers in the chain. @@ -1310,8 +1318,7 @@ ASTReader::ASTReadResult ASTReader::ReadSLocEntryRecord(unsigned ID) { || (time_t)Record[5] != File->getModificationTime() #endif )) { - Diag(diag::err_fe_pch_file_modified) - << Filename; + Error(diag::err_fe_pch_file_modified, Filename); return Failure; } |