glsl2: Reject return types with qualifiers.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 29 Jun 2010 07:48:10 +0000 (00:48 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 29 Jun 2010 18:12:54 +0000 (11:12 -0700)
Fixes piglit test return-qualifier.frag.

src/glsl/ast_to_hir.cpp

index 45228649adc2a2aa12425d0c4051989c5a85f8fd..5a13b74c0379e1626ee6f5aca10da18b86d399fd 100644 (file)
@@ -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);