[Mesa-dev] [PATCH 2/2] glsl: do not raise uninitialized warning with in/inout function parameters

Alejandro PiƱeiro apinheiro at igalia.com
Tue Apr 19 17:48:03 UTC 2016


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/inout modes
checks are done.
---
 src/compiler/glsl/ast_function.cpp | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/compiler/glsl/ast_function.cpp b/src/compiler/glsl/ast_function.cpp
index db68d5d..3b60a9c 100644
--- a/src/compiler/glsl/ast_function.cpp
+++ b/src/compiler/glsl/ast_function.cpp
@@ -43,6 +43,11 @@ 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();
@@ -263,6 +268,19 @@ 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 != NULL) {
+            if ((var->data.mode == ir_var_auto || var->data.mode == ir_var_shader_out)
+                && var->data.assigned != true
+                && !is_gl_identifier(var->name)) {
+               _mesa_glsl_warning(&loc, state, "`%s' used uninitialized",
+                                  var->name);
+            }
+         }
+
       }
 
       if (formal->type->is_image() &&
-- 
2.5.0



More information about the mesa-dev mailing list