From 3751e6e1fc385739022d0942b46e175632ad0d4b Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 8 Jul 2010 09:22:52 -0600 Subject: [PATCH] glsl: fix 'if ((x=foo()) > 1.0)' bug Fixes fd.o bug 27216. May also be the root cause of fd.o bug 28950. We weren't propogating the storage info for the x=foo() expression up through the IR tree to the inequality expression. NOTE: This is a candidate for the Mesa 7.8 branch. --- src/mesa/slang/slang_emit.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mesa/slang/slang_emit.c b/src/mesa/slang/slang_emit.c index aa9d662..127c672 100644 --- a/src/mesa/slang/slang_emit.c +++ b/src/mesa/slang/slang_emit.c @@ -2361,7 +2361,10 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n) #if 0 assert(!n->Store); #endif - n->Store = n->Children[1]->Store; + if (n->Children[1]->Store) + n->Store = n->Children[1]->Store; + else + n->Store = n->Children[0]->Store; return inst; case IR_SCOPE: @@ -2369,6 +2372,7 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n) _slang_push_var_table(emitInfo->vt); inst = emit(emitInfo, n->Children[0]); _slang_pop_var_table(emitInfo->vt); + n->Store = n->Children[0]->Store; return inst; case IR_VAR_DECL: -- 2.7.4