glsl: Don't return NULL IR for erroneous bit-shift operators.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 18 Oct 2010 07:24:46 +0000 (00:24 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 18 Oct 2010 07:26:14 +0000 (00:26 -0700)
Existing code relies on IR being generated (possibly with error type)
rather than returning NULL.  So, don't break - go ahead and generate the
operation.  As long as an error is flagged, things will work out.

Fixes fd.o bug #30914.

src/glsl/ast_to_hir.cpp

index b37fcbd3bc5f69d9d6eebd41aaddb8646d07b69d..a46d6901a9c910ff15337ba982648e748f152379 100644 (file)
@@ -752,7 +752,6 @@ ast_expression::hir(exec_list *instructions,
           _mesa_glsl_error(&loc, state, "operator %s requires GLSL 1.30",
               operator_string(this->oper));
           error_emitted = true;
-          break;
        }
 
        /* From page 50 (page 56 of the PDF) of the GLSL 1.30 spec:
@@ -774,21 +773,18 @@ ast_expression::hir(exec_list *instructions,
                "LHS of operator %s must be an integer or integer vector",
                operator_string(this->oper));
            error_emitted = true;
-           break;
        }
        if (!op[1]->type->is_integer()) {
            _mesa_glsl_error(& loc, state,
                "RHS of operator %s must be an integer or integer vector",
                operator_string(this->oper));
            error_emitted = true;
-           break;
        }
        if (op[0]->type->is_scalar() && !op[1]->type->is_scalar()) {
            _mesa_glsl_error(& loc, state,
                "If the first operand of %s is scalar, the second must be"
                "scalar as well", operator_string(this->oper));
            error_emitted = true;
-           break;
        }
        if (op[0]->type->is_vector() &&
            op[1]->type->is_vector() &&
@@ -798,7 +794,6 @@ ast_expression::hir(exec_list *instructions,
                "Vector operands of %s must have same number of components",
                operator_string(this->oper));
            error_emitted = true;
-           break;
        }
 
        type = op[0]->type;