additional error detection
authorBrian <brian@yutani.localnet.net>
Wed, 7 Mar 2007 15:55:42 +0000 (08:55 -0700)
committerBrian <brian@yutani.localnet.net>
Wed, 7 Mar 2007 15:55:42 +0000 (08:55 -0700)
src/mesa/shader/slang/slang_codegen.c

index 26be14a0565b8da8f1f2dd30dd4c494e31d43a5d..b2c9c727104dda0655b8a145c79e5ffd947c794a 100644 (file)
@@ -2077,6 +2077,10 @@ _slang_gen_field(slang_assemble_ctx * A, slang_operation *oper)
       GLint size = 4; /* XXX fix? */
 
       base = _slang_gen_operation(A, &oper->children[0]);
+      if (!base) {
+         /* error previously found */
+         return NULL;
+      }
 
       n = new_node1(IR_FIELD, base);
       if (n) {
@@ -2118,6 +2122,7 @@ _slang_gen_subscript(slang_assemble_ctx * A, slang_operation *oper)
       if (oper->children[1].type != SLANG_OPER_LITERAL_INT ||
           index >= max) {
          slang_info_log_error(A->log, "Invalid array index for vector type");
+         return NULL;
       }
 
       n = _slang_gen_operation(A, &oper->children[0]);
@@ -2143,7 +2148,11 @@ _slang_gen_subscript(slang_assemble_ctx * A, slang_operation *oper)
       slang_typeinfo_construct(&elem_ti);
       _slang_typeof_operation(A, oper, &elem_ti);
       elemSize = _slang_sizeof_type_specifier(&elem_ti.spec);
-      assert(elemSize >= 1);
+      if (elemSize <= 0) {
+         /* unknown var or type */
+         slang_info_log_error(A->log, "Undefined var or type");
+         return NULL;
+      }
 
       array = _slang_gen_operation(A, &oper->children[0]);
       index = _slang_gen_operation(A, &oper->children[1]);