nir/vars_to_ssa: Handle missing struct members in foreach_deref_node
authorJason Ekstrand <jason@jlekstrand.net>
Tue, 18 Jul 2017 23:50:39 +0000 (16:50 -0700)
committerTimothy Arceri <tarceri@itsqueeze.com>
Wed, 19 Jul 2017 01:06:23 +0000 (11:06 +1000)
This can happen if, for instance, you have an array of structs and there
are both direct and wildcard references to the same struct and some
members only have direct or only have indirect.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Cc: mesa-stable@lists.freedesktop.org
src/compiler/nir/nir_lower_vars_to_ssa.c

index e5a12eb9713c115c33d62f91d59c431faa93ec5e..e8cfe308d2630b7dfc8c95fd9c9e205bcfd79f13 100644 (file)
@@ -245,8 +245,12 @@ foreach_deref_node_worker(struct deref_node *node, nir_deref *deref,
 
       case nir_deref_type_struct: {
          nir_deref_struct *str = nir_deref_as_struct(deref->child);
-         return foreach_deref_node_worker(node->children[str->index],
-                                          deref->child, cb, state);
+         if (node->children[str->index] &&
+             !foreach_deref_node_worker(node->children[str->index],
+                                        deref->child, cb, state))
+            return false;
+
+         return true;
       }
 
       default: