diff options
| author | Brian <brian@yutani.localnet.net> | 2007-03-28 13:29:57 -0600 | 
|---|---|---|
| committer | Brian <brian@yutani.localnet.net> | 2007-03-28 13:29:57 -0600 | 
| commit | b463d521432c675c6336fde8b39870717e099be5 (patch) | |
| tree | 3ef607e4df18d10226d215f8961365d2a39b122b /src | |
| parent | 7e4a7fdddd0b333d6825ac0154affeb520c5f0fe (diff) | |
added some null ptr checks to handle error recovery
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/shader/slang/slang_emit.c | 17 | 
1 files changed, 15 insertions, 2 deletions
diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c index eeaeab1626..dd71933765 100644 --- a/src/mesa/shader/slang/slang_emit.c +++ b/src/mesa/shader/slang/slang_emit.c @@ -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;     }  | 
