Mesa (master): glsl2: Forbid array-types in ?: operator in GLSL 1.10

Ian Romanick idr at kemper.freedesktop.org
Tue Sep 7 21:39:03 UTC 2010


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

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Tue Sep  7 14:30:06 2010 -0700

glsl2: Forbid array-types in ?: operator in GLSL 1.10

Fixes bugzilla #30039.

---

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

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 762f802..7828403 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -1125,6 +1125,17 @@ ast_expression::hir(exec_list *instructions,
 	 type = op[1]->type;
       }
 
+      /* From page 33 (page 39 of the PDF) of the GLSL 1.10 spec:
+       *
+       *    "The second and third expressions must be the same type, but can
+       *    be of any type other than an array."
+       */
+      if ((state->language_version <= 110) && type->is_array()) {
+	 _mesa_glsl_error(& loc, state, "Second and third operands of ?: "
+			  "operator must not be arrays.");
+	 error_emitted = true;
+      }
+
       ir_constant *cond_val = op[0]->constant_expression_value();
       ir_constant *then_val = op[1]->constant_expression_value();
       ir_constant *else_val = op[2]->constant_expression_value();




More information about the mesa-commit mailing list