Fix type handling in ir_dereference array dereference constructor
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Apr 2010 01:02:48 +0000 (18:02 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Apr 2010 01:02:48 +0000 (18:02 -0700)
ir.cpp

diff --git a/ir.cpp b/ir.cpp
index 90df67bbf1dcd8388d0186661b2ec790bd0bc0dd..60f34ca9bea8b307309e293574c1a1e4fb0df8c0 100644 (file)
--- a/ir.cpp
+++ b/ir.cpp
@@ -117,7 +117,18 @@ ir_dereference::ir_dereference(ir_instruction *var,
    : ir_rvalue(), mode(ir_reference_array),
      var(var)
 {
-   this->type = (var != NULL) ? var->type : glsl_type::error_type;
+   type = glsl_type::error_type;
+
+   if (var != NULL) {
+      const glsl_type *const vt = var->type;
+
+      if (vt->is_array()) {
+        type = vt->element_type();
+      } else if (vt->is_matrix() || vt->is_vector()) {
+        type = vt->get_base_type();
+      }
+   }
+
    this->selector.array_index = array_index;
 }