From f382b8836adc00deaa411ef74460e8302139b5f5 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 18 Dec 2015 13:58:05 +0000 Subject: Fix error handling in LLVMGetBitcodeModuleInContext. It was not setting OutMessage. llvm-svn: 255998 --- llvm/lib/Bitcode/Reader/BitReader.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Bitcode/Reader/BitReader.cpp') diff --git a/llvm/lib/Bitcode/Reader/BitReader.cpp b/llvm/lib/Bitcode/Reader/BitReader.cpp index 7ace802..2d15165 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 Owner(unwrap(MemBuf)); ErrorOr> 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; } -- cgit v1.1