From: Kenneth Graunke Date: Tue, 13 Mar 2012 19:51:15 +0000 (-0700) Subject: glsl: Make ir_dereference_record constructor assert the variable exists. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2cd652f810e3417ff458f23a8c72a0c84e342258;p=mesa.git glsl: Make ir_dereference_record constructor assert the variable exists. Providing a NULL pointer to the ir_dereference_record() constructor seems like a bad idea. Currently, if provided NULL, it returns a partially constructed value of error type. However, none of the callers are prepared to handle that scenario. Code inspection shows that all callers do one of the following: - Already NULL-check the argument prior to creating the dereference - Already deference the argument (and thus would crash if it were NULL) - Newly allocate the argument. Thus, it should be safe to simply assert the value passed is not NULL. This should also catch issues right away, rather than dying later. Signed-off-by: Kenneth Graunke Reviewed-by: Eric Anholt --- diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp index 3fc4a9857e2..fb9a50e1aa5 100644 --- a/src/glsl/ir.cpp +++ b/src/glsl/ir.cpp @@ -1074,11 +1074,12 @@ ir_dereference_array::set_array(ir_rvalue *value) ir_dereference_record::ir_dereference_record(ir_rvalue *value, const char *field) { + assert(value != NULL); + this->ir_type = ir_type_dereference_record; this->record = value; this->field = ralloc_strdup(this, field); - this->type = (this->record != NULL) - ? this->record->type->field_type(field) : glsl_type::error_type; + this->type = this->record->type->field_type(field); } @@ -1090,8 +1091,7 @@ ir_dereference_record::ir_dereference_record(ir_variable *var, this->ir_type = ir_type_dereference_record; this->record = new(ctx) ir_dereference_variable(var); this->field = ralloc_strdup(this, field); - this->type = (this->record != NULL) - ? this->record->type->field_type(field) : glsl_type::error_type; + this->type = this->record->type->field_type(field); } bool