glsl: Don't allow const on out or inout function parameters

Fixes piglit tests const-inout-parameter.frag and
const-out-parameter.frag.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: "9.2" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 5894898148)
This commit is contained in:
Ian Romanick 2013-08-08 16:42:37 -07:00
parent 4006fc4656
commit cb8e109492

View file

@ -1963,6 +1963,21 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
_mesa_glsl_shader_target_name(state->target));
}
/* Section 6.1.1 (Function Calling Conventions) of the GLSL 1.10 spec says:
*
* "However, the const qualifier cannot be used with out or inout."
*
* The same section of the GLSL 4.40 spec further clarifies this saying:
*
* "The const qualifier cannot be used with out or inout, or a
* compile-time error results."
*/
if (is_parameter && qual->flags.q.constant && qual->flags.q.out) {
_mesa_glsl_error(loc, state,
"`const' may not be applied to `out' or `inout' "
"function parameters");
}
/* If there is no qualifier that changes the mode of the variable, leave
* the setting alone.
*/