In a shader such as: struct S { float f; } float identity(float S) { return S; }
we would think that "S" in "return S" referred to a structure, even though it's shadowed by the "float S" parameter in the inner struct. This led to the parser's grammar seeing TYPE_IDENTIFIER and getting confused. Fixes dEQP-GLES2.functional.shaders.scoping.valid. function_parameter_hides_struct_type_{vertex,fragment}. Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/compiler/glsl/glsl_parser.yy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/compiler/glsl/glsl_parser.yy b/src/compiler/glsl/glsl_parser.yy index d69c48e..709d801 100644 --- a/src/compiler/glsl/glsl_parser.yy +++ b/src/compiler/glsl/glsl_parser.yy @@ -894,6 +894,7 @@ parameter_declarator: $$->type->set_location(@1); $$->type->specifier = $1; $$->identifier = $2; + state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto)); } | type_specifier any_identifier array_specifier { @@ -905,6 +906,7 @@ parameter_declarator: $$->type->specifier = $1; $$->identifier = $2; $$->array_specifier = $3; + state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto)); } ; -- 2.7.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev