summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2010-07-12 10:13:20 -0700
committerEric Anholt <[email protected]>2010-07-12 12:02:11 -0700
commitd2afc874452a84965ee71c96f80e1d124c211ff4 (patch)
tree1b68ffcaa01c4bd95295f2f0b968d25146b1a9e0
parent284d821206d74fddb346cd0d892d2dcec463e2a5 (diff)
glsl2: Check when inlining a bare function call that it actually is.
It would be easy to miss an entry either of the two visitors involved that would result in trying to ir->remove() the call to remove it from the instruction stream when really it's part of an expression tree that wasn't flattened.
-rw-r--r--src/glsl/ir_function_inlining.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/glsl/ir_function_inlining.cpp b/src/glsl/ir_function_inlining.cpp
index 6fe1264b0a4..8c545aaa6b7 100644
--- a/src/glsl/ir_function_inlining.cpp
+++ b/src/glsl/ir_function_inlining.cpp
@@ -233,6 +233,12 @@ ir_visitor_status
ir_function_inlining_visitor::visit_enter(ir_call *ir)
{
if (can_inline(ir)) {
+ /* If the call was part of some tree, then it should have been
+ * flattened out or we shouldn't have seen it because of a
+ * visit_continue_with_parent in this visitor.
+ */
+ assert(ir == base_ir);
+
(void) ir->generate_inline(ir);
ir->remove();
this->progress = true;