From: Ian Romanick Date: Wed, 26 May 2010 22:08:11 +0000 (-0700) Subject: Fix setting the maximum accessed array element X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a9159f9e87b518ba0a4ad43db8fdd58a678b3a92;p=mesa.git Fix setting the maximum accessed array element Array dereferences now point to variable dereferences instead of pointing directly to variables. This necessitated some changes to the way the variable is accessed when setting the maximum index array element. --- diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp index 64f8ef49681..7759c36a699 100644 --- a/ast_to_hir.cpp +++ b/ast_to_hir.cpp @@ -1097,7 +1097,7 @@ ast_expression::hir(exec_list *instructions, error_emitted = op[0]->type->is_error() || op[1]->type->is_error(); - ir_instruction *const array = op[0]; + ir_rvalue *const array = op[0]; result = new ir_dereference_array(op[0], op[1]); @@ -1181,7 +1181,13 @@ ast_expression::hir(exec_list *instructions, } if (array->type->is_array()) { - ir_variable *const v = array->as_variable(); + /* If the array is a variable dereference, it dereferences the + * whole array, by definition. Use this to get the variable. + * + * FINISHME: Should some methods for getting / setting / testing + * FINISHME: array access limits be added to ir_dereference? + */ + ir_variable *const v = array->whole_variable_referenced(); if ((v != NULL) && (unsigned(idx) > v->max_array_access)) v->max_array_access = idx; }