glsl: fix 'if ((x=foo()) > 1.0)' bug
authorBrian Paul <brianp@vmware.com>
Thu, 8 Jul 2010 15:22:52 +0000 (09:22 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 8 Jul 2010 15:22:54 +0000 (09:22 -0600)
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

index aa9d6624d5b4649bf6d4512c9225fdfc4eacdedf..127c6725542168b739e0680e3b47344090e958ed 100644 (file)
@@ -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: