From: Eric Anholt Date: Wed, 14 Apr 2010 23:16:20 +0000 (-0700) Subject: Check that function definition parameter qualifiers match proto qualifiers. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1e7ec3ce128a9d30d7d9e1707a22b270eb525075;p=mesa.git Check that function definition parameter qualifiers match proto qualifiers. Fixes function9.frag. --- diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp index 4e1c8191771..b150ba36908 100644 --- a/ast_to_hir.cpp +++ b/ast_to_hir.cpp @@ -1841,6 +1841,29 @@ ast_function::hir(exec_list *instructions, * definition. */ if (parameter_lists_match(& hir_parameters, & sig->parameters)) { + exec_list_iterator iter_a = hir_parameters.iterator(); + exec_list_iterator iter_b = sig->parameters.iterator(); + + /* check that the qualifiers match. */ + while (iter_a.has_next()) { + ir_variable *a = (ir_variable *)iter_a.get(); + ir_variable *b = (ir_variable *)iter_b.get(); + + if (a->read_only != b->read_only || + a->interpolation != b->interpolation || + a->centroid != b->centroid) { + YYLTYPE loc = this->get_location(); + + _mesa_glsl_error(& loc, state, + "function `%s' parameter `%s' qualifiers " + "don't match prototype", + name, a->name); + } + + iter_a.next(); + iter_b.next(); + } + /* FINISHME: Compare return types. */ if (is_definition && (sig->definition != NULL)) {