added some null ptr checks to handle error recovery
authorBrian <brian@yutani.localnet.net>
Wed, 28 Mar 2007 19:29:57 +0000 (13:29 -0600)
committerBrian <brian@yutani.localnet.net>
Wed, 28 Mar 2007 19:29:57 +0000 (13:29 -0600)
src/mesa/shader/slang/slang_emit.c

index eeaeab162664a423502adcef1587a34586ffeaf1..dd719337657603dedf1464d9f1e31d410cbcfff4 100644 (file)
@@ -508,8 +508,13 @@ emit_arith(slang_emit_info *emitInfo, slang_ir_node *n)
       /* normal case */
 
       /* gen code for children */
-      for (i = 0; i < info->NumParams; i++)
+      for (i = 0; i < info->NumParams; i++) {
          emit(emitInfo, n->Children[i]);
+         if (!n->Children[i] || !n->Children[i]->Store) {
+            /* error recovery */
+            return NULL;
+         }
+      }
 
       /* gen this instruction and src registers */
       inst = new_instruction(emitInfo, info->InstOpcode);
@@ -997,6 +1002,11 @@ emit_cond(slang_emit_info *emitInfo, slang_ir_node *n)
    /* emit code for the expression */
    inst = emit(emitInfo, n->Children[0]);
 
+   if (!n->Children[0]->Store) {
+      /* error recovery */
+      return NULL;
+   }
+
    assert(n->Children[0]->Store);
    /*assert(n->Children[0]->Store->Size == 1);*/
 
@@ -1074,7 +1084,10 @@ emit_if(slang_emit_info *emitInfo, slang_ir_node *n)
 
    inst = emit(emitInfo, n->Children[0]);  /* the condition */
    if (emitInfo->EmitCondCodes) {
-      assert(inst);
+      if (!inst) {
+         /* error recovery */
+         return NULL;
+      }
       condWritemask = inst->DstReg.WriteMask;
    }