[Mesa-dev] [PATCH] glsl: Add function parameters to the parser symbol table.
Kenneth Graunke
kenneth at whitecape.org
Sat Mar 5 06:30:22 UTC 2016
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 <kenneth at 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
More information about the mesa-dev
mailing list