From 87dcae4c820905fb65420a326f7c671ae9d4a646 Mon Sep 17 00:00:00 2001 From: Shreedhar Hardikar Date: Mon, 28 Nov 2016 15:49:21 -0800 Subject: [PATCH] Capture and print error messages from llvm::verifyFunction Signed-off-by: Nikos Armenatzoglou --- src/backend/codegen/include/codegen/base_codegen.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/backend/codegen/include/codegen/base_codegen.h b/src/backend/codegen/include/codegen/base_codegen.h index a44b5fe17d..b87415b64b 100644 --- a/src/backend/codegen/include/codegen/base_codegen.h +++ b/src/backend/codegen/include/codegen/base_codegen.h @@ -24,6 +24,7 @@ extern "C" { #include "llvm/IR/Function.h" #include "llvm/IR/Verifier.h" +#include "llvm/Support/raw_ostream.h" namespace gpcodegen { @@ -65,11 +66,15 @@ class BaseCodegen: public CodegenInterface { if (codegen_validate_functions && valid_generated_functions) { for (llvm::Function* function : uncompiled_generated_functions_) { assert(nullptr != function); + std::string func_name = function->getName(); + std::string error_message = ""; + llvm::raw_string_ostream out(error_message); // Verify function returns true if there are errors. - valid_generated_functions &= !llvm::verifyFunction(*function); + valid_generated_functions &= !llvm::verifyFunction(*function, &out); + out.flush(); if (!valid_generated_functions) { - std::string func_name = function->getName(); - elog(WARNING, "Broken function found '%s'", func_name.c_str()); + elog(WARNING, "Broken function found %s: %s", + func_name.c_str(), error_message.c_str()); break; } } -- GitLab