[Mesa-dev] [PATCH v3] glsl: do not raise uninitialized warning with out function parameters

Ian Romanick idr at freedesktop.org
Thu May 26 00:48:37 UTC 2016


This patch is

Reviewed-by: Ian Romanick <ian.d.romanick at 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() &&
> 



More information about the mesa-dev mailing list