Tom Stellard <thomas.stell...@amd.com> writes: > --- > .../state_trackers/clover/llvm/invocation.cpp | 30 > ++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp > b/src/gallium/state_trackers/clover/llvm/invocation.cpp > index 088039a..a1a54e0 100644 > --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp > +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp > @@ -33,6 +33,8 @@ > #include <llvm/Linker.h> > #else > #include <llvm/Linker/Linker.h> > +#include <llvm/IR/DiagnosticInfo.h> > +#include <llvm/IR/DiagnosticPrinter.h> > #endif > #if HAVE_LLVM < 0x0303 > #include <llvm/DerivedTypes.h> > @@ -551,6 +553,22 @@ namespace { > } > } // End anonymous namespace > > +#if HAVE_LLVM >= 0x0305 > + > +static void diagnostic_handler(const llvm::DiagnosticInfo &di, void > *err_string) { > + if (di.getSeverity() == llvm::DS_Error) { > + std::string message; > + llvm::raw_string_ostream stream(message); > + llvm::DiagnosticPrinterRawOStream dp(stream); > + di.print(dp); > + stream.flush(); > + std::string *out_string = (std::string*)err_string; > + *out_string = message; > + } > +} > + > +#endif > + > module > clover::compile_program_llvm(const compat::string &source, > enum pipe_shader_ir ir, > @@ -578,6 +596,11 @@ clover::compile_program_llvm(const compat::string > &source, > llvm::LLVMContext llvm_ctx; > unsigned optimization_level; > > +#if HAVE_LLVM >= 0x0305 > + std::string diagnostic_message; > + llvm_ctx.setDiagnosticHandler(diagnostic_handler, &diagnostic_message);
Maybe you could directly pass a pointer to r_log as argument to the diagnostic handler so you can avoid the problem below? > +#endif > + > // The input file name must have the .cl extension in order for the > // CompilerInvocation class to recognize it as an OpenCL source file. > llvm::Module *mod = compile(llvm_ctx, source, "input.cl", triple, > processor, > @@ -607,5 +630,12 @@ clover::compile_program_llvm(const compat::string > &source, > // LLVM 3.6 and newer, the user takes ownership of the module. > delete mod; > #endif > +#if HAVE_LLVM >= 0x0305 > + if (diagnostic_message.size()) { > + r_log = diagnostic_message; This is probably not executed if the compilation fails throwing an exception. And don't we want to append to the log instead of overwriting its previous contents? Thanks. > + throw build_error(); > + } > +#endif > + > return m; > } > -- > 1.8.5.5
pgpP8dpdFasdP.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev