Fix setting the maximum accessed array element
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 26 May 2010 22:08:11 +0000 (15:08 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 26 May 2010 22:23:25 +0000 (15:23 -0700)
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.

ast_to_hir.cpp

index 64f8ef49681a7e7a482f6e91d09c609415f65845..7759c36a69941590eb44dff6f25de53db02abd34 100644 (file)
@@ -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;
         }