This patch is Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>
On 05/13/2016 01:16 AM, Alejandro Piñeiro wrote: > It silence by default warnings with function parameters, as the > parameters need to be processed in order to have the actual and the > formal parameter, and the function signature. Then it raises the > warning if needed at verify_parameter_modes where other in/out/inout modes > checks are done. > > v2: fix comment style, multi-line condition style, simplify check, > remove extra blank (Ian Romanick) > v3: inout function parameters can raise the warning too (Ian > Romanick) > --- > > One of the extra tests Ian proposed for patch 05 showed that the patch > was wrong, as inout function parameters should raise the warning too. > > So the warning should be raised too inside the out/inout if (the one > that starts with the comment /* Verify that 'out' and 'inout' ...) > for inout vars, and before var->data.assigned is set. > > > src/compiler/glsl/ast_function.cpp | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/src/compiler/glsl/ast_function.cpp > b/src/compiler/glsl/ast_function.cpp > index 37fb3e79..68bccbd 100644 > --- a/src/compiler/glsl/ast_function.cpp > +++ b/src/compiler/glsl/ast_function.cpp > @@ -43,6 +43,12 @@ process_parameters(exec_list *instructions, exec_list > *actual_parameters, > unsigned count = 0; > > foreach_list_typed(ast_node, ast, link, parameters) { > + /* We need to process the parameters first in order to know if we can > + * raise or not a unitialized warning. Calling set_is_lhs silence the > + * warning for now. Raising the warning or not will be checked at > + * verify_parameter_modes. > + */ > + ast->set_is_lhs(true); > ir_rvalue *result = ast->hir(instructions, state); > > ir_constant *const constant = result->constant_expression_value(); > @@ -247,6 +253,16 @@ verify_parameter_modes(_mesa_glsl_parse_state *state, > } > > ir_variable *var = actual->variable_referenced(); > + > + if (var && formal->data.mode == ir_var_function_inout) { > + if ((var->data.mode == ir_var_auto || var->data.mode == > ir_var_shader_out) && > + !var->data.assigned && > + !is_gl_identifier(var->name)) { > + _mesa_glsl_warning(&loc, state, "`%s' used uninitialized", > + var->name); > + } > + } > + > if (var) > var->data.assigned = true; > > @@ -263,6 +279,18 @@ verify_parameter_modes(_mesa_glsl_parse_state *state, > mode, formal->name); > return false; > } > + } else { > + assert(formal->data.mode == ir_var_function_in || > + formal->data.mode == ir_var_const_in); > + ir_variable *var = actual->variable_referenced(); > + if (var) { > + if ((var->data.mode == ir_var_auto || var->data.mode == > ir_var_shader_out) && > + !var->data.assigned && > + !is_gl_identifier(var->name)) { > + _mesa_glsl_warning(&loc, state, "`%s' used uninitialized", > + var->name); > + } > + } > } > > if (formal->type->is_image() && > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev