summaryrefslogtreecommitdiff
path: root/src/glsl
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2010-06-29 00:48:10 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-06-29 11:12:54 -0700
commitac04c257e31fe012dac750bcf5bf3134ba07ebdc (patch)
tree648d8fc3805a0064f5638c557a3930ddb037d9a3 /src/glsl
parent28527ed557923aecff5d3b88e5d7776f04389547 (diff)
glsl2: Reject return types with qualifiers.
Fixes piglit test return-qualifier.frag.
Diffstat (limited to 'src/glsl')
-rw-r--r--src/glsl/ast_to_hir.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 45228649ad..5a13b74c03 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -1984,6 +1984,7 @@ ast_function::hir(exec_list *instructions,
ir_function_signature *sig = NULL;
exec_list hir_parameters;
+ const char *const name = identifier;
/* Convert the list of function parameters to HIR now so that they can be
* used below to compare this function's signature with previously seen
@@ -1999,11 +2000,19 @@ ast_function::hir(exec_list *instructions,
assert(return_type != NULL);
+ /* From page 56 (page 62 of the PDF) of the GLSL 1.30 spec:
+ * "No qualifier is allowed on the return type of a function."
+ */
+ if (this->return_type->has_qualifiers()) {
+ YYLTYPE loc = this->get_location();
+ _mesa_glsl_error(& loc, state,
+ "function `%s' return type has qualifiers", name);
+ }
+
/* Verify that this function's signature either doesn't match a previously
* seen signature for a function with the same name, or, if a match is found,
* that the previously seen signature does not have an associated definition.
*/
- const char *const name = identifier;
f = state->symbols->get_function(name);
if (f != NULL) {
ir_function_signature *sig = f->exact_matching_signature(&hir_parameters);