[Mesa-dev] [PATCH] clover: fix build failure since bfd695e

Ilia Mirkin imirkin at alum.mit.edu
Sat Feb 13 17:11:58 UTC 2016


On Sat, Feb 13, 2016 at 12:01 PM, Serge Martin <edb+mesa at sigluy.net> wrote:
> ---
>  src/gallium/state_trackers/clover/core/kernel.cpp | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/state_trackers/clover/core/kernel.cpp b/src/gallium/state_trackers/clover/core/kernel.cpp
> index 41b3852..a4ef2b1 100644
> --- a/src/gallium/state_trackers/clover/core/kernel.cpp
> +++ b/src/gallium/state_trackers/clover/core/kernel.cpp
> @@ -76,9 +76,10 @@ kernel::launch(command_queue &q,
>                                exec.g_buffers.data(), g_handles.data());
>
>     // Fill information for the launch_grid() call.
> -   info.block = pad_vector(q, block_size, 1).data(),
> -   info.grid = pad_vector(q, reduced_grid_size, 1).data(),
> -   info.pc = find(name_equals(_name), m.sysm).offset;
> +   memcpy(info.block, pad_vector(q, block_size, 1).data(), sizeof(info.block));

This is equivalent to
int *x;
{
  std::vector foo = pad_vector(...);
  x = foo.data();
}
use(x)

Of course by the time you use x, the underlying vector backing it will
have been freed. This was also a problem in the original code before
Samuel ever touched it. You could do something like...

{
  std::vector<uint> padded = pad_vector(...);
  memcpy(info.block, padded.data(), sizeof(info.block));
}

and then again for the second one. I couldn't come up with a cleaner
alternative... std::copy() needs the begin/end iterators, which would
also require a temp var.

> +   memcpy(info.grid, pad_vector(q, reduced_grid_size, 1).data(),
> +                                                            sizeof(info.grid));
> +   info.pc = find(name_equals(_name), m.syms).offset;
>     info.input = exec.input.data();
>
>     q.pipe->launch_grid(q.pipe, &info);
> --
> 2.5.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list