diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-12-18 13:58:05 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-12-18 13:58:05 +0000 |
commit | f382b8836adc00deaa411ef74460e8302139b5f5 (patch) | |
tree | d28b65d5c2cc71e07491cbe74e36caae0869f535 /llvm/lib/Bitcode/Reader/BitReader.cpp | |
parent | 3aac36ad019d8d6cd5e9c36329512e8d5798e113 (diff) | |
download | bcm5719-llvm-f382b8836adc00deaa411ef74460e8302139b5f5.tar.gz bcm5719-llvm-f382b8836adc00deaa411ef74460e8302139b5f5.zip |
Fix error handling in LLVMGetBitcodeModuleInContext.
It was not setting OutMessage.
llvm-svn: 255998
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitReader.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitReader.cpp b/llvm/lib/Bitcode/Reader/BitReader.cpp index 7ace802ba21..2d15165dcec 100644 --- a/llvm/lib/Bitcode/Reader/BitReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitReader.cpp @@ -71,17 +71,24 @@ LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, char **OutMessage) { + LLVMContext &Ctx = *unwrap(ContextRef); + LLVMContext::DiagnosticHandlerTy OldDiagnosticHandler = + Ctx.getDiagnosticHandler(); + void *OldDiagnosticContext = Ctx.getDiagnosticContext(); + std::string Message; + Ctx.setDiagnosticHandler(diagnosticHandler, &Message, true); std::unique_ptr<MemoryBuffer> Owner(unwrap(MemBuf)); ErrorOr<std::unique_ptr<Module>> ModuleOrErr = - getLazyBitcodeModule(std::move(Owner), *unwrap(ContextRef)); + getLazyBitcodeModule(std::move(Owner), Ctx); Owner.release(); + Ctx.setDiagnosticHandler(OldDiagnosticHandler, OldDiagnosticContext, true); - if (std::error_code EC = ModuleOrErr.getError()) { + if (ModuleOrErr.getError()) { *OutM = wrap((Module *)nullptr); if (OutMessage) - *OutMessage = strdup(EC.message().c_str()); + *OutMessage = strdup(Message.c_str()); return 1; } |