Module: vkd3d Branch: master Commit: 4d2ce385a7b9d738407c3c59787505c23b2bb0fa URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/4d2ce385a7b9d738407c3c59787505...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Sat Jun 15 22:19:40 2024 +0200
vkd3d-shader/hlsl: Do not crash on initialization of a redefined variable.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
---
libs/vkd3d-shader/hlsl.y | 9 ++++++++- tests/hlsl/default-values.shader_test | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index f5611e67..c7af2a10 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -2629,7 +2629,14 @@ static struct hlsl_block *initialize_vars(struct hlsl_ctx *ctx, struct list *var
if (is_default_values_initializer) { - assert(!var->default_values); + /* Default values might have been allocated already for another variable of the same name, + in the same scope. */ + if (var->default_values) + { + free_parse_variable_def(v); + continue; + } + if (!(var->default_values = hlsl_calloc(ctx, component_count, sizeof(*var->default_values)))) { free_parse_variable_def(v); diff --git a/tests/hlsl/default-values.shader_test b/tests/hlsl/default-values.shader_test index 4dbb2a8c..0d319f4d 100644 --- a/tests/hlsl/default-values.shader_test +++ b/tests/hlsl/default-values.shader_test @@ -320,3 +320,12 @@ float4 main() : sv_target { return u.y; } + +[pixel shader fail] +float a = 1; +int a = 2; + +float4 main() : sv_target +{ + return 0; +}