Mesa (glsl2): ast_to_hir: Fix bug in constant initializers.

Kenneth Graunke kwg at kemper.freedesktop.org
Thu Jul 22 00:21:29 UTC 2010


Module: Mesa
Branch: glsl2
Commit: e1d71850faba23d1bea3858a8c2e05a45fd21143
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e1d71850faba23d1bea3858a8c2e05a45fd21143

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Tue Jul 20 03:53:47 2010 -0700

ast_to_hir: Fix bug in constant initializers.

Implicit conversions were not being performed, nor was there any
type checking - it was possible to have, say, var->type == float
and var->constant_value->type == int.  Later use of the constant
expression would trigger an assertion.

Fixes piglit test const-implicit-conversion.frag.

---

 src/glsl/ast_to_hir.cpp |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index e9257ee..99a2183 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -1804,6 +1804,16 @@ ast_declarator_list::hir(exec_list *instructions,
 	  * declaration.
 	  */
 	 if (this->type->qualifier.constant || this->type->qualifier.uniform) {
+	    ir_rvalue *new_rhs = validate_assignment(state, var->type, rhs);
+	    if (new_rhs != NULL) {
+	       rhs = new_rhs;
+	    } else {
+	       _mesa_glsl_error(&initializer_loc, state,
+			        "initializer of type %s cannot be assigned to "
+				"variable of type %s",
+				rhs->type->name, var->type->name);
+	    }
+
 	    ir_constant *constant_value = rhs->constant_expression_value();
 	    if (!constant_value) {
 	       _mesa_glsl_error(& initializer_loc, state,




More information about the mesa-commit mailing list