From: Nicolai Hähnle <nicolai.haeh...@amd.com> This macro avoids undefined downcasting of list sentinels that crashes gcc's ubsan. --- src/compiler/glsl/list.h | 8 ++++++++ src/compiler/glsl/opt_tree_grafting.cpp | 5 +---- 2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/src/compiler/glsl/list.h b/src/compiler/glsl/list.h index 12389aa..f05d437 100644 --- a/src/compiler/glsl/list.h +++ b/src/compiler/glsl/list.h @@ -719,6 +719,14 @@ inline void exec_node::insert_before(exec_list *before) /** * Iterate over a range [begin, end) of nodes. */ +#define for_range_list(__type, __node, __begin, __end) \ + for (__type *(__node), **__flag = &(__node); __flag; __flag = NULL) \ + for (exec_node *__cur = (__begin), \ + *__end_stored = (__end); \ + __cur != __end_stored && \ + (((__node) = (__type *) __cur) || true); \ + __cur = __cur->next) + #define for_range_list_safe(__type, __node, __begin, __end) \ for (__type *(__node), **__flag = &(__node); __flag; __flag = NULL) \ for (struct exec_node *__cur = (__begin), \ diff --git a/src/compiler/glsl/opt_tree_grafting.cpp b/src/compiler/glsl/opt_tree_grafting.cpp index 47fca7d..539ed57 100644 --- a/src/compiler/glsl/opt_tree_grafting.cpp +++ b/src/compiler/glsl/opt_tree_grafting.cpp @@ -323,10 +323,7 @@ try_tree_grafting(ir_assignment *start, fprintf(stderr, "\n"); } - for (ir_instruction *ir = (ir_instruction *)start->next; - ir != bb_last->next; - ir = (ir_instruction *)ir->next) { - + for_range_list(ir_instruction, ir, start->next, bb_last->next) { if (debug) { fprintf(stderr, "- "); ir->fprint(stderr); -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev