Signed-off-by: Timothy Arceri <t_arc...@yahoo.com.au> --- src/glsl/ast_to_hir.cpp | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-)
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 3bc181e..a7aa4c7 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -805,33 +805,36 @@ do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state, if (new_rhs != NULL) { rhs = new_rhs; - /* If the LHS array was not declared with a size, it takes it size from - * the RHS. If the LHS is an l-value and a whole array, it must be a - * dereference of a variable. Any other case would require that the LHS - * is either not an l-value or not a whole array. - */ - if (lhs->type->is_unsized_array()) { - ir_dereference *const d = lhs->as_dereference(); + if (lhs->type->is_array()) { + /* If the LHS array was not declared with a size, it takes it size + * from the RHS. If the LHS is an l-value and a whole array, it must + * be a dereference of a variable. Any other case would require that + * the LHS is either not an l-value or not a whole array. + */ + if (lhs->type->is_unsized_array()) { + ir_dereference *const d = lhs->as_dereference(); - assert(d != NULL); + assert(d != NULL); - ir_variable *const var = d->variable_referenced(); + ir_variable *const var = d->variable_referenced(); - assert(var != NULL); + assert(var != NULL); - if (var->data.max_array_access >= unsigned(rhs->type->array_size())) { - /* FINISHME: This should actually log the location of the RHS. */ - _mesa_glsl_error(& lhs_loc, state, "array size must be > %u due to " - "previous access", - var->data.max_array_access); - } + if (var->data.max_array_access >= + unsigned(rhs->type->array_size())) { + /* FINISHME: This should actually log the location of the RHS.*/ + _mesa_glsl_error(& lhs_loc, state, "array size must be > %u due" + " to previous access", + var->data.max_array_access); + } - var->type = glsl_type::get_array_instance(lhs->type->element_type(), - rhs->type->array_size()); - d->type = var->type; + var->type = glsl_type::get_array_instance(lhs->type->element_type(), + rhs->type->array_size()); + d->type = var->type; + } + mark_whole_array_access(rhs); + mark_whole_array_access(lhs); } - mark_whole_array_access(rhs); - mark_whole_array_access(lhs); } /* Most callers of do_assignment (assign, add_assign, pre_inc/dec, -- 1.8.3.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev