Mesa (master): glsl: do not raise uninitialized warning with out function parameters

Alejandro Pinheiro apinheiro at kemper.freedesktop.org
Thu May 26 07:27:42 UTC 2016


Module: Mesa
Branch: master
Commit: 66ff04322e80d14d9b1c8a4d1ef8cf63440242af
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=66ff04322e80d14d9b1c8a4d1ef8cf63440242af

Author: Alejandro Piñeiro <apinheiro at igalia.com>
Date:   Tue Apr 19 11:17:27 2016 +0200

glsl: do not raise uninitialized warning with out function parameters

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)

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 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 4433fdd..a97e6c9 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();
@@ -257,6 +263,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;
 
@@ -273,6 +289,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-commit mailing list