glsl: Add array access bounds checking to ir_validate
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 24 Mar 2011 23:49:21 +0000 (16:49 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 25 Mar 2011 18:28:07 +0000 (11:28 -0700)
src/glsl/ir_validate.cpp

index 0fc3baf869021166c7544d510490f9183a0cae11..ec79d05cae9401133f3c1b32f1d22c9c68a7c7b7 100644 (file)
@@ -473,6 +473,21 @@ ir_validate::visit(ir_variable *ir)
       assert(ralloc_parent(ir->name) == ir);
 
    hash_table_insert(ht, ir, ir);
+
+
+   /* If a variable is an array, verify that the maximum array index is in
+    * bounds.  There was once an error in AST-to-HIR conversion that set this
+    * to be out of bounds.
+    */
+   if (ir->type->array_size() > 0) {
+      if (ir->max_array_access >= ir->type->length) {
+        printf("ir_variable has maximum access out of bounds (%d vs %d)\n",
+               ir->max_array_access, ir->type->length - 1);
+        ir->print();
+        abort();
+      }
+   }
+
    return visit_continue;
 }