From 7e35bdad1c67d7df2832ac4b39bff471e83812e5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolai=20H=C3=A4hnle?= Date: Fri, 17 Nov 2017 20:01:50 +0100 Subject: [PATCH] st_glsl_to_tgsi: check for the tail sentinel in merge_two_dsts MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This fixes yet another case where DFRACEXP has only one destination. Found by address sanitizer. Fixes tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-frexp-dvec4-only-mantissa.shader_test Fixes: 3b666aa74795 ("st/glsl_to_tgsi: fix DFRACEXP with only one destination") Acked-by: Marek Olšák --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 0772b736275..fa51fef343b 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -5252,7 +5252,7 @@ glsl_to_tgsi_visitor::merge_two_dsts(void) defined = 0; inst2 = (glsl_to_tgsi_instruction *) inst->next; - do { + while (!inst2->is_tail_sentinel()) { if (inst->op == inst2->op && inst2->dst[defined].file == PROGRAM_UNDEFINED && inst->src[0].file == inst2->src[0].file && @@ -5261,9 +5261,9 @@ glsl_to_tgsi_visitor::merge_two_dsts(void) inst->src[0].swizzle == inst2->src[0].swizzle) break; inst2 = (glsl_to_tgsi_instruction *) inst2->next; - } while (inst2); + } - if (!inst2) { + if (inst2->is_tail_sentinel()) { /* Undefined destinations are not allowed, substitute with an unused * temporary register. */ -- 2.30.2