glsl: Fix the foreach_in_list_reverse macro.
authorKenneth Graunke <kenneth@whitecape.org>
Sun, 6 Jul 2014 05:04:45 +0000 (22:04 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 8 Jul 2014 19:31:01 +0000 (12:31 -0700)
We clearly don't want to start at the head and walk backwards; we want
to start at the last real element before the tail sentinel.  If the list
is empty, tail_pred will be the head sentinel, and we'll stop.

Nothing uses this function, so I guess nobody noticed it was broken.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/glsl/list.h

index 922bd68ab5ee4e8c4ac3860de2d05892eba42165..a4444bda9e6a180530c5375d21e069d1ddbe156f 100644 (file)
@@ -565,9 +565,9 @@ inline void exec_node::insert_before(exec_list *before)
         !(__inst)->is_tail_sentinel();               \
         (__inst) = (__type *)(__inst)->next)
 
-#define foreach_in_list_reverse(__type, __inst, __list) \
-   for (__type *(__inst) = (__type *)(__list)->head;    \
-        !(__inst)->is_head_sentinel();                  \
+#define foreach_in_list_reverse(__type, __inst, __list)   \
+   for (__type *(__inst) = (__type *)(__list)->tail_pred; \
+        !(__inst)->is_head_sentinel();                    \
         (__inst) = (__type *)(__inst)->prev)
 
 /**