summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/glsl/linker.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index d7638facce6..e62fe6d7e9f 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -871,23 +871,27 @@ link_intrastage_shaders(void *mem_ctx,
* unspecified sizes have a size specified. The size is inferred from the
* max_array_access field.
*/
- foreach_list(node, linked->ir) {
- ir_variable *const var = ((ir_instruction *) node)->as_variable();
+ if (linked != NULL) {
+ foreach_list(node, linked->ir) {
+ ir_variable *const var = ((ir_instruction *) node)->as_variable();
- if (var == NULL)
- continue;
+ if (var == NULL)
+ continue;
- if (!var->type->is_array() || (var->type->length != 0))
- continue;
+ if ((var->mode != ir_var_auto) && (var->mode != ir_var_temporary))
+ continue;
- const glsl_type *type =
- glsl_type::get_array_instance(var->type->fields.array,
- var->max_array_access);
+ if (!var->type->is_array() || (var->type->length != 0))
+ continue;
- assert(type != NULL);
- var->type = type;
- }
+ const glsl_type *type =
+ glsl_type::get_array_instance(var->type->fields.array,
+ var->max_array_access);
+ assert(type != NULL);
+ var->type = type;
+ }
+ }
return linked;
}