summaryrefslogtreecommitdiffstats
path: root/src/glsl
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2010-11-10 16:33:10 -0800
committerIan Romanick <[email protected]>2010-11-19 15:00:25 -0800
commitfc92e87b9757eda01caf0bb3e2c31b1dbbd73aa0 (patch)
tree0166f7ad2f9b19794f8a65b0b050fe4dc4cd083a /src/glsl
parentf2616e56de8a48360cae8f269727b58490555f4d (diff)
glsl: Eliminate assumptions about size of ir_expression::operands
This may grow in the near future.
Diffstat (limited to 'src/glsl')
-rw-r--r--src/glsl/ir_clone.cpp3
-rw-r--r--src/glsl/ir_constant_expression.cpp2
-rw-r--r--src/glsl/ir_print_visitor.cpp7
-rw-r--r--src/glsl/lower_mat_op_to_vec.cpp2
-rw-r--r--src/glsl/opt_algebraic.cpp1
5 files changed, 9 insertions, 6 deletions
diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp
index a3cc8dbc970..4032647c3a2 100644
--- a/src/glsl/ir_clone.cpp
+++ b/src/glsl/ir_clone.cpp
@@ -22,6 +22,7 @@
*/
#include <string.h>
+#include "main/compiler.h"
#include "ir.h"
#include "glsl_types.h"
extern "C" {
@@ -160,7 +161,7 @@ ir_call::clone(void *mem_ctx, struct hash_table *ht) const
ir_expression *
ir_expression::clone(void *mem_ctx, struct hash_table *ht) const
{
- ir_rvalue *op[2] = {NULL, NULL};
+ ir_rvalue *op[Elements(this->operands)] = { NULL, };
unsigned int i;
for (i = 0; i < get_num_operands(); i++) {
diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp
index 45860b279fb..1fe15050470 100644
--- a/src/glsl/ir_constant_expression.cpp
+++ b/src/glsl/ir_constant_expression.cpp
@@ -57,7 +57,7 @@ ir_expression::constant_expression_value()
if (this->type->is_error())
return NULL;
- ir_constant *op[2] = { NULL, NULL };
+ ir_constant *op[Elements(this->operands)] = { NULL, };
ir_constant_data data;
memset(&data, 0, sizeof(data));
diff --git a/src/glsl/ir_print_visitor.cpp b/src/glsl/ir_print_visitor.cpp
index 5c19db13260..e5067bfdad0 100644
--- a/src/glsl/ir_print_visitor.cpp
+++ b/src/glsl/ir_print_visitor.cpp
@@ -182,11 +182,10 @@ void ir_print_visitor::visit(ir_expression *ir)
printf(" %s ", ir->operator_string());
- if (ir->operands[0])
- ir->operands[0]->accept(this);
+ for (unsigned i = 0; i < ir->get_num_operands(); i++) {
+ ir->operands[i]->accept(this);
+ }
- if (ir->operands[1])
- ir->operands[1]->accept(this);
printf(") ");
}
diff --git a/src/glsl/lower_mat_op_to_vec.cpp b/src/glsl/lower_mat_op_to_vec.cpp
index 4965df8976d..7065fdec35f 100644
--- a/src/glsl/lower_mat_op_to_vec.cpp
+++ b/src/glsl/lower_mat_op_to_vec.cpp
@@ -366,6 +366,8 @@ ir_mat_op_to_vec_visitor::visit_leave(ir_assignment *orig_assign)
if (!has_matrix_operand(orig_expr, matrix_columns))
return visit_continue;
+ assert(orig_expr->get_num_operands() <= 2);
+
mem_ctx = talloc_parent(orig_assign);
ir_dereference_variable *lhs_deref =
diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp
index 88b6c485d31..9a8080bff3d 100644
--- a/src/glsl/opt_algebraic.cpp
+++ b/src/glsl/opt_algebraic.cpp
@@ -181,6 +181,7 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
ir_expression *temp;
unsigned int i;
+ assert(ir->get_num_operands() <= 2);
for (i = 0; i < ir->get_num_operands(); i++) {
if (ir->operands[i]->type->is_matrix())
return ir;