Tom Stellard thomas.stell...@amd.com writes:
This will allow us to handle internal compiler errors.
v2:
- Code cleanups.
---
.../state_trackers/clover/llvm/invocation.cpp | 27
++
1 file changed, 27 insertions(+)
diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp
b/src/gallium/state_trackers/clover/llvm/invocation.cpp
index d9c3d11..5cc0825 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
@@ -566,6 +568,26 @@ namespace {
return m;
}
+#if HAVE_LLVM = 0x0305
+
+ void
+ diagnostic_handler(const llvm::DiagnosticInfo di, void *data) {
+ if (di.getSeverity() == llvm::DS_Error) {
+ std::string message;
+ llvm::raw_string_ostream stream(message);
+ llvm::DiagnosticPrinterRawOStream dp(stream);
+ di.print(dp);
+ stream.flush();
+ compat::string *r_log = (compat::string*)data;
+ message.insert(0, *r_log);
+ *r_log = message;
Doesn't raw_string_ostream append to the end of the string? You could
save a copy by doing it like:
| std::string message = *(compat::string *)data;
| llvm::raw_string_ostream stream(message);
|
| ...
|
| stream.flush();
| *(compat::string *)data = message;
+
+ throw build_error();
+ }
+ }
+
+#endif
+
void
init_targets() {
LLVMInitializeAllTargets();
@@ -598,6 +620,10 @@ clover::compile_program_llvm(const compat::string
source,
llvm::LLVMContext llvm_ctx;
unsigned optimization_level;
+#if HAVE_LLVM = 0x0305
+ llvm_ctx.setDiagnosticHandler(diagnostic_handler, r_log);
+#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(llvm_ctx, source, input.cl, triple,
@@ -629,5 +655,6 @@ clover::compile_program_llvm(const compat::string source,
// LLVM 3.6 and newer, the user takes ownership of the module.
delete mod;
#endif
+
return m;
}
--
1.8.5.5
pgp9vZyr0FZqZ.pgp
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev