[PATCH vkd3d v2 1/6] vkd3d-shader/hlsl: Properly free parse_variable_def memory in declare_vars().

Francisco Casas fcasas at codeweavers.com
Tue Feb 22 16:13:37 CST 2022


Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>

---
v2:
- Removed guards for vkd3d_free(v->arrays.sizes).

Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
---
 libs/vkd3d-shader/hlsl.y | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
index 459ad03b..5e142914 100644
--- a/libs/vkd3d-shader/hlsl.y
+++ b/libs/vkd3d-shader/hlsl.y
@@ -1467,6 +1467,8 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
             hlsl_error(ctx, &v->loc, VKD3D_SHADER_ERROR_HLSL_MISSING_INITIALIZER,
                     "Const variable \"%s\" is missing an initializer.", var->name);
             hlsl_free_var(var);
+            free_parse_initializer(&v->initializer);
+            vkd3d_free(v->arrays.sizes);
             vkd3d_free(v);
             continue;
         }
@@ -1479,6 +1481,8 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
                     "Variable \"%s\" was already declared in this scope.", var->name);
             hlsl_note(ctx, &old->loc, VKD3D_SHADER_LOG_ERROR, "\"%s\" was previously declared here.", old->name);
             hlsl_free_var(var);
+            free_parse_initializer(&v->initializer);
+            vkd3d_free(v->arrays.sizes);
             vkd3d_free(v);
             continue;
         }
@@ -1521,6 +1525,7 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
             {
                 FIXME("Initializers for non scalar/struct variables not supported yet.\n");
                 free_parse_initializer(&v->initializer);
+                vkd3d_free(v->arrays.sizes);
                 vkd3d_free(v);
                 continue;
             }
@@ -1528,6 +1533,7 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
             {
                 hlsl_fixme(ctx, &v->loc, "Array initializer.");
                 free_parse_initializer(&v->initializer);
+                vkd3d_free(v->arrays.sizes);
                 vkd3d_free(v);
                 continue;
             }
@@ -1550,6 +1556,8 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
                 list_move_tail(statements_list, v->initializer.instrs);
             vkd3d_free(v->initializer.instrs);
         }
+
+        vkd3d_free(v->arrays.sizes);
         vkd3d_free(v);
     }
     vkd3d_free(var_list);
-- 
2.25.1




More information about the wine-devel mailing list