From bfabef0e7104dc4043a74ef44e71ecc7636cfe12 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Fri, 7 Apr 2017 11:24:37 +1000 Subject: glsl: fix lower jumps for nested non-void returns Fixes the case were a loop contains a return and the loop is nested inside an if. Reviewed-by: Roland Scheidegger https://bugs.freedesktop.org/show_bug.cgi?id=100303 --- src/compiler/glsl/lower_jumps.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/compiler/glsl/lower_jumps.cpp') diff --git a/src/compiler/glsl/lower_jumps.cpp b/src/compiler/glsl/lower_jumps.cpp index e165172301a..7dc34056a1b 100644 --- a/src/compiler/glsl/lower_jumps.cpp +++ b/src/compiler/glsl/lower_jumps.cpp @@ -945,6 +945,12 @@ lower_continue: */ if (this->function.signature->return_type->is_void()) return_if->then_instructions.push_tail(new(ir) ir_return(NULL)); + else { + assert(this->function.return_value); + ir_variable* return_value = this->function.return_value; + return_if->then_instructions.push_tail( + new(ir) ir_return(new(ir) ir_dereference_variable(return_value))); + } } ir->insert_after(return_if); -- cgit v1.2.3