summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Berry <stereotype441@gmail.com>2013-07-14 08:57:49 -0700
committerPaul Berry <stereotype441@gmail.com>2013-07-15 07:59:52 -0700
commit428e0302100a82ab8ed5734eabd781ae36882fad (patch)
tree13fc7a95f475563d28a4a961938c159093411cc1
parentb2265db8e77b531e380c47bb5bf31a3c0aa36e08 (diff)
glsl: Fix lower_named_interface_blocks to account for dereferences of consts.
In certain rare cases (such as those involving dereference of a literal constant array of structs), flatten_named_interface_blocks_declarations's rvalue visitor may be invoked on an ir_dereference_record whose variable_referenced() method returns NULL. Check for this case to avoid a segfault. Prevents crashes in piglit tests {vs,fs}-deref-literal-array-of-structs. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
-rw-r--r--src/glsl/lower_named_interface_blocks.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/glsl/lower_named_interface_blocks.cpp b/src/glsl/lower_named_interface_blocks.cpp
index 922cc024f8..d0d491d3db 100644
--- a/src/glsl/lower_named_interface_blocks.cpp
+++ b/src/glsl/lower_named_interface_blocks.cpp
@@ -194,6 +194,8 @@ flatten_named_interface_blocks_declarations::handle_rvalue(ir_rvalue **rvalue)
return;
ir_variable *var = ir->variable_referenced();
+ if (var == NULL)
+ return;
if (!var->is_interface_instance())
return;