summaryrefslogtreecommitdiffstats
path: root/src/glsl
diff options
context:
space:
mode:
authorPaul Berry <stereotype441@gmail.com>2013-07-24 08:04:44 -0700
committerPaul Berry <stereotype441@gmail.com>2013-07-25 09:37:02 -0700
commita5eecb246d66fd8f27eca3c4f6f83bf2641b9403 (patch)
tree3ef9909d31010c81139eb35ab54548736002fc46 /src/glsl
parentb8f13fbb856534cbc1345325b74ec47711493dd6 (diff)
downloadexternal_mesa3d-a5eecb246d66fd8f27eca3c4f6f83bf2641b9403.zip
external_mesa3d-a5eecb246d66fd8f27eca3c4f6f83bf2641b9403.tar.gz
external_mesa3d-a5eecb246d66fd8f27eca3c4f6f83bf2641b9403.tar.bz2
glsl: Handle empty if statement encountered during loop analysis.
The is_loop_terminator() function was asserting that the following kind of if statement could never occur: if (...) { } else { } (presumably based on the assumption that such an if statement would be eliminated by previous optimization stages). But that isn't the case--it's possible that previous optimization stages might simplify more complex code down to this empty if statement, in which case it won't be eliminated until the next time through the optimization loop. So is_loop_terminator() needs to handle it. Fortunately it's easy to handle--it's not a loop terminator because it does nothing. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=64330 CC: mesa-stable@lists.freedesktop.org Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/glsl')
-rw-r--r--src/glsl/loop_analysis.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/glsl/loop_analysis.cpp b/src/glsl/loop_analysis.cpp
index 191e92d..40897bb 100644
--- a/src/glsl/loop_analysis.cpp
+++ b/src/glsl/loop_analysis.cpp
@@ -503,7 +503,8 @@ is_loop_terminator(ir_if *ir)
ir_instruction *const inst =
(ir_instruction *) ir->then_instructions.get_head();
- assert(inst != NULL);
+ if (inst == NULL)
+ return false;
if (inst->ir_type != ir_type_loop_jump)
return false;