[Mesa-stable] [PATCH 3/4] st/glsl_to_tgsi: avoid iterating past the head of the instruction list
Emil Velikov
emil.l.velikov at gmail.com
Wed Mar 1 16:59:07 UTC 2017
On 22 February 2017 at 19:04, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> exec_node::get_prev() does not guard against going past the beginning
> of the list, so we need to add explicit checks here.
>
> Found by ASAN in piglit arb_shader_storage_buffer_object-rendering.
>
> Cc: mesa-stable at lists.freedesktop.org
> ---
> src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index 630f5af..fac41b8 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -3603,24 +3603,31 @@ glsl_to_tgsi_visitor::visit_ssbo_intrinsic(ir_call *ir)
> }
>
> /* The emit_asm() might have actually split the op into pieces, e.g. for
> * double stores. We have to go back and fix up all the generated ops.
> */
> unsigned op = inst->op;
> do {
> inst->resource = buffer;
> if (access)
> inst->buffer_access = access->value.u[0];
> +
> + if (inst == this->instructions.get_head_raw())
> + break;
> inst = (glsl_to_tgsi_instruction *)inst->get_prev();
> - if (inst->op == TGSI_OPCODE_UADD)
> +
> + if (inst->op == TGSI_OPCODE_UADD) {
> + if (inst == this->instructions.get_head_raw())
> + break;
> inst = (glsl_to_tgsi_instruction *)inst->get_prev();
> - } while (inst && inst->op == op && inst->resource.file == PROGRAM_UNDEFINED);
> + }
> + } while (inst->op == op && inst->resource.file == PROGRAM_UNDEFINED);
> }
>
Afaict the patch/equivalent has not landed in master. Short on review
or simply superseded ?
Thanks
Emil
More information about the mesa-stable
mailing list