[Mesa-dev] [RFC 3/3] glsl: raise warning when using uninitialized variables
Alejandro Piñeiro
apinheiro at igalia.com
Thu Feb 25 08:09:27 UTC 2016
On 25/02/16 00:27, Timothy Arceri wrote:
> On Wed, 2016-02-24 at 20:04 +0100, Alejandro Piñeiro wrote:
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94129
>> ---
>> src/compiler/glsl/ast_to_hir.cpp | 7 +++++++
>> 1 file changed, 7 insertions(+)
>>
>> diff --git a/src/compiler/glsl/ast_to_hir.cpp
>> b/src/compiler/glsl/ast_to_hir.cpp
>> index ee5485c..296c845 100644
>> --- a/src/compiler/glsl/ast_to_hir.cpp
>> +++ b/src/compiler/glsl/ast_to_hir.cpp
>> @@ -1885,6 +1885,13 @@ ast_expression::do_hir(exec_list
>> *instructions,
>> if (var != NULL) {
>> var->data.used = true;
>> result = new(ctx) ir_dereference_variable(var);
>> +
>> + if (var->data.mode == ir_var_auto
> I think we would also maybe want to warn for output varyings???
>
> var->data.mode == ir_var_shader_out
Ok, I will check this one.
>> + && !assignment_recipient
>> + && result->variable_referenced()->data.assigned !=
>> true) {
>> + _mesa_glsl_warning(& loc, state, "`%s' used
> ---^
> We don't really use this style anymore
Well, I just used the style of the mesa_glsl_error three lines below :/.
Thanks for pointing it, I would not have realized it, I will update the
code.
>> uninitialized",
>> + this->primary_expression.identifier);
>> + }
> I think what you have will work but I don't really like passing
> around assignment_recipient. Maybe it would be better just to add a new
> bool lhs_var; to the ast_expression class that defaults to false and
> use that instead.
At some point I thought on that idea too, but as I mentioned on the
cover letter, on the ast tree we don't have access to the parent
expression, that is the one that would get lhs_var assigned. The only
solution to that problem that I found is that when being assigned to a
expression, it would need to go for all the children and assigning that
value, something that was also somewhat intrusive and probably slower
compared to what I finally implemented. In any case, I will try to
implement that variant, so reviewers would decide what is the best option.
Thanks for all the feedback.
BR
More information about the mesa-dev
mailing list