glsl: Add single declaration variables to the symbol table too.
The lexer/parser use a symbol table to classify identifiers as variables, functions, or structure types. For some reason, we neglected to add variables in simple declarations such as int x = 5; but did add subsequent variables in multi-declarations: int x = 5, y = 6; // y gets added, but not x, for some reason Fixes four dEQP-GLES2.functional.shaders.scoping.valid subcases: - local_int_variable_hides_struct_type_vertex - local_int_variable_hides_struct_type_fragment - local_struct_variable_hides_struct_type_vertex - local_struct_variable_hides_struct_type_fragment Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
This commit is contained in:
@@ -1062,6 +1062,7 @@ single_declaration:
|
|||||||
$$ = new(ctx) ast_declarator_list($1);
|
$$ = new(ctx) ast_declarator_list($1);
|
||||||
$$->set_location_range(@1, @2);
|
$$->set_location_range(@1, @2);
|
||||||
$$->declarations.push_tail(&decl->link);
|
$$->declarations.push_tail(&decl->link);
|
||||||
|
state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto));
|
||||||
}
|
}
|
||||||
| fully_specified_type any_identifier array_specifier
|
| fully_specified_type any_identifier array_specifier
|
||||||
{
|
{
|
||||||
@@ -1072,6 +1073,7 @@ single_declaration:
|
|||||||
$$ = new(ctx) ast_declarator_list($1);
|
$$ = new(ctx) ast_declarator_list($1);
|
||||||
$$->set_location_range(@1, @3);
|
$$->set_location_range(@1, @3);
|
||||||
$$->declarations.push_tail(&decl->link);
|
$$->declarations.push_tail(&decl->link);
|
||||||
|
state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto));
|
||||||
}
|
}
|
||||||
| fully_specified_type any_identifier array_specifier '=' initializer
|
| fully_specified_type any_identifier array_specifier '=' initializer
|
||||||
{
|
{
|
||||||
@@ -1082,6 +1084,7 @@ single_declaration:
|
|||||||
$$ = new(ctx) ast_declarator_list($1);
|
$$ = new(ctx) ast_declarator_list($1);
|
||||||
$$->set_location_range(@1, @3);
|
$$->set_location_range(@1, @3);
|
||||||
$$->declarations.push_tail(&decl->link);
|
$$->declarations.push_tail(&decl->link);
|
||||||
|
state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto));
|
||||||
}
|
}
|
||||||
| fully_specified_type any_identifier '=' initializer
|
| fully_specified_type any_identifier '=' initializer
|
||||||
{
|
{
|
||||||
@@ -1092,6 +1095,7 @@ single_declaration:
|
|||||||
$$ = new(ctx) ast_declarator_list($1);
|
$$ = new(ctx) ast_declarator_list($1);
|
||||||
$$->set_location_range(@1, @2);
|
$$->set_location_range(@1, @2);
|
||||||
$$->declarations.push_tail(&decl->link);
|
$$->declarations.push_tail(&decl->link);
|
||||||
|
state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto));
|
||||||
}
|
}
|
||||||
| INVARIANT variable_identifier
|
| INVARIANT variable_identifier
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user