From f382b8836adc00deaa411ef74460e8302139b5f5 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 18 Dec 2015 13:58:05 +0000 Subject: [PATCH] Fix error handling in LLVMGetBitcodeModuleInContext. It was not setting OutMessage. llvm-svn: 255998 --- llvm/lib/Bitcode/Reader/BitReader.cpp | 13 ++++++++++--- llvm/test/Bindings/llvm-c/invalid-bitcode.test | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Bitcode/Reader/BitReader.cpp b/llvm/lib/Bitcode/Reader/BitReader.cpp index 7ace802ba21a..2d15165dcec1 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; } diff --git a/llvm/test/Bindings/llvm-c/invalid-bitcode.test b/llvm/test/Bindings/llvm-c/invalid-bitcode.test index f8835b9b8bd0..65b97e60281b 100644 --- a/llvm/test/Bindings/llvm-c/invalid-bitcode.test +++ b/llvm/test/Bindings/llvm-c/invalid-bitcode.test @@ -1,3 +1,4 @@ ; RUN: not llvm-c-test --module-dump < %S/Inputs/invalid.ll.bc 2>&1 | FileCheck %s +; RUN: not llvm-c-test --lazy-module-dump < %S/Inputs/invalid.ll.bc 2>&1 | FileCheck %s CHECK: Error parsing bitcode: Unknown attribute kind (52)