summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2017-07-18 16:50:39 -0700
committerTimothy Arceri <tarceri@itsqueeze.com>2017-07-19 11:06:23 +1000
commitecf91898e0a8e144adb82d72aecf1224e77ee31b (patch)
treed95a77e2b86d8eb5de46f96d7dbefca733283ef1
parentd9015b1eab66afd8c53cbd35e6e946e041848727 (diff)
nir/vars_to_ssa: Handle missing struct members in foreach_deref_node
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
-rw-r--r--src/compiler/nir/nir_lower_vars_to_ssa.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/compiler/nir/nir_lower_vars_to_ssa.c b/src/compiler/nir/nir_lower_vars_to_ssa.c
index e5a12eb971..e8cfe308d2 100644
--- a/src/compiler/nir/nir_lower_vars_to_ssa.c
+++ b/src/compiler/nir/nir_lower_vars_to_ssa.c
@@ -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: