[Mesa-dev] [PATCH] spirv: avoid infinite loop / freeze in vtn_cfg_walk_blocks()

Eero Tamminen eero.t.tamminen at intel.com
Thu Dec 21 13:53:13 UTC 2017


Fixes: 9702fac68e (spirv: consider bitsize when handling OpSwitch cases)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104359
---
  src/compiler/spirv/vtn_cfg.c | 14 +++++++-------
  1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c
index 9c4cbe2..3d5de37 100644
--- a/src/compiler/spirv/vtn_cfg.c
+++ b/src/compiler/spirv/vtn_cfg.c
@@ -549,19 +549,19 @@ vtn_cfg_walk_blocks(struct vtn_builder *b, struct 
list_head *cf_list,
              struct vtn_block *case_block =
                 vtn_value(b, *w, vtn_value_type_block)->block;

-            if (case_block == break_block)
-               continue;
-
-            vtn_assert(case_block->switch_case);
-
-            vtn_order_case(swtch, case_block->switch_case);
-
              if (bitsize <= 32) {
                 w += 2;
              } else {
                 assert(bitsize == 64);
                 w += 3;
              }
+
+            if (case_block == break_block)
+               continue;
+
+            vtn_assert(case_block->switch_case);
+
+            vtn_order_case(swtch, case_block->switch_case);
           }

           enum vtn_branch_type branch_type =
--
2.7.4


More information about the mesa-dev mailing list