From: Pierre Moreau Date: Thu, 29 Dec 2016 23:29:20 +0000 (+0100) Subject: clover: Check for executables before enqueueing a kernel X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4e0d171d7eb6accbf8f381530eedbc9ff86b54fb;p=mesa.git clover: Check for executables before enqueueing a kernel Without this check, the kernel::bind() method would fail with a std::out_of_range exception, letting an exception escape from the library into the client, rather than returning the corresponding error code CL_INVALID_PROGRAM_EXECUTABLE. Signed-off-by: Pierre Moreau Reviewed-by: Francisco Jerez --- diff --git a/src/gallium/state_trackers/clover/api/kernel.cpp b/src/gallium/state_trackers/clover/api/kernel.cpp index 73ba34abe8e..b665773d9ec 100644 --- a/src/gallium/state_trackers/clover/api/kernel.cpp +++ b/src/gallium/state_trackers/clover/api/kernel.cpp @@ -215,7 +215,10 @@ namespace { }, kern.args())) throw error(CL_INVALID_KERNEL_ARGS); - if (!count(q.device(), kern.program().devices())) + // If the command queue's device is not associated to the program, we get + // a module, with no sections, which will also fail the following test. + auto &m = kern.program().build(q.device()).binary; + if (!any_of(type_equals(module::section::text_executable), m.secs)) throw error(CL_INVALID_PROGRAM_EXECUTABLE); }