From d9fef848a651b47520cbeb72c38b93d4fbf842a8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vedran=20Mileti=C4=87?= Date: Wed, 21 Dec 2016 13:49:36 +0100 Subject: [PATCH] clover: Use Clang's diagnostics MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Presently errors from frontend are handled only if they occur in clang::CompilerInvocation::CreateFromArgs(). This patch uses clang::DiagnosticsEngine to detect errors such as invalid values for Clang frontend arguments. Fixes Piglit's cl/program/build/fail/invalid-version-declaration.cl test. v2: fix inconsistent code formatting Signed-off-by: Vedran Miletić Reviewed-by: Francisco Jerez Tested-by: Aaron Watry --- src/gallium/state_trackers/clover/llvm/invocation.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp index 675cf1944d7..f63ff3d41c3 100644 --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp @@ -98,8 +98,9 @@ namespace { const std::vector &opts, std::string &r_log) { std::unique_ptr c { new clang::CompilerInstance }; + clang::TextDiagnosticBuffer *diag_buffer = new clang::TextDiagnosticBuffer; clang::DiagnosticsEngine diag { new clang::DiagnosticIDs, - new clang::DiagnosticOptions, new clang::TextDiagnosticBuffer }; + new clang::DiagnosticOptions, diag_buffer }; // Parse the compiler options. A file name should be present at the end // and must have the .cl extension in order for the CompilerInvocation @@ -111,6 +112,10 @@ namespace { c->getInvocation(), copts.data(), copts.data() + copts.size(), diag)) throw invalid_build_options_error(); + diag_buffer->FlushDiagnostics(diag); + if (diag.hasErrorOccurred()) + throw invalid_build_options_error(); + c->getTargetOpts().CPU = target.cpu; c->getTargetOpts().Triple = target.triple; c->getLangOpts().NoBuiltin = true; -- 2.30.2